SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.05.2012 10:02:51

yok
Участник
Зарегистрирован: 24.03.2010
Сообщений: 13

Как перезаписать в поле id номера с 1 ++ по возврастающей подряд

Есть две таблицы в них уникальный id он не автоинкремент, а берется мах +1 и делается под этот номер записи в двух таблицах.
Но записи удаляются периодически, в результате номера идут в выводе не подряд, а допустим после 20 идет 23.
Хочу сделать чтобы все id в выводе cтали подряд и после 20 шел уже 21 что была запись по 23му.
Да, если запись под каким либо id удалялась , то удалялась из обоих таблиц соответственно, поэтому соответствие таблиц есть.

Есть какая команда чтобы перенумеровать поле сверху вниз по возрастающей?
Я для двух таблиц выполню команду и соответствие сохранится но уже в номерах будет порядок, без пробелов.
Какие тут подводные камни?
Конечно дамп базы перед процедурой выполню.

Неактивен

 

#2 31.05.2012 14:28:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как перезаписать в поле id номера с 1 ++ по возврастающей подряд

Создаете новую колонку, заполняете её по возрастающей (например, с помощью пользовательских переменных или первичного ключа), синхронизируете со второй таблицей, удаляете старую колонку id, новую переименовываете в id.

Но зачем это нужно? Что плохого в том, что значения идут не подряд?

Неактивен

 

#3 31.05.2012 15:06:03

yok
Участник
Зарегистрирован: 24.03.2010
Сообщений: 13

Re: Как перезаписать в поле id номера с 1 ++ по возврастающей подряд

vasya написал:

Но зачем это нужно? Что плохого в том, что значения идут не подряд?

Из базы выводятся записи в таблице и там отображается id , хотя можно было бы в таблице выводить просто подряд номера, а не id таблицы, я только сейчас подумал об этом.

Хотя может быть и есть смысл, можно напрямую из мускула посмотреть этот id в таблицах. Хотя его и по другому могу найти.
Не подумал об этом сразу.

Наверно так даже лучше, как выше. Решение нашел такое.

$sql="UPDATE `info` SET `id`=(SELECT @a:=@a + 1 FROM (SELECT @a:= 0) as tbl)";


Но решил разобраться в этом вопросе , уж если начал.
Не скажите как в таких случаях решается вопросы блокировки, на момент АПДЕЙТА таблицы?

Неактивен

 

#4 31.05.2012 15:21:47

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Как перезаписать в поле id номера с 1 ++ по возврастающей подряд

Вся таблица будет заблокирована пока идет апдейт.

Неактивен

 

#5 31.05.2012 15:59:08

yok
Участник
Зарегистрирован: 24.03.2010
Сообщений: 13

Re: Как перезаписать в поле id номера с 1 ++ по возврастающей подряд

СПАСИБО !!!

Неактивен

 

#6 02.06.2012 12:06:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как перезаписать в поле id номера с 1 ++ по возврастающей подряд

yok написал:

Наверно так даже лучше, как выше. Решение нашел такое.

$sql="UPDATE `info` SET `id`=(SELECT @a:=@a + 1 FROM (SELECT @a:= 0) as tbl)";


Но решил разобраться в этом вопросе , уж если начал.
Не скажите как в таких случаях решается вопросы блокировки, на момент АПДЕЙТА таблицы?

И вы уверены, что обновление таблицы будет в порядке возрастания id?
А ещё что будет, если между командой на обновление первой и второй таблиц будет добавлена новая запись?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson