PDA

Просмотр полной версии : Очередной вопрос по MYSQL


maddy
03.05.2009, 00:43
Люди, помогите плиз, к гуглу по человечески обратиться не смог, потому что сформулировать это кратко как-то не вышло.
Вот есть у меня в базе данных в таблице, поле с параметром Авто-инкрипмент и все с ним нормально ячейки с добавленной информацией нумеруются примерно так.

1
2
3
4
Но стоит удалить хоть одну запись, как получается фигня типа
1
3
4
Так вот собственно вопрос как сделать так, чтобы нумерация не сбивалась, как-то упорядочить чтоли
до такого состояния

1
2
3
И отсутствовали выпавшие порядковые номера

voland
03.05.2009, 09:25
maddy, сделайте копированием данных таблицы в новую. Я попробовал - получилось. Запрос типа:

INSERT INTO dest (F1,F2,F3) SELECT F1, F2, F3 FROM src ORDER BY IND

То есть сортировка будет по IND, а в таблице dest нужно предварительно создать поле IND с автоинкрементом. Потом можно переименовать таблицу. Если данных не много - этот путь должен подойти.

Madga
03.05.2009, 10:55
C SQL давно не работал, но припоминаю что писали функции, которые пересчитывали ключи. Там есть встроенные какието, погугли в этом ключе...

Makar
06.05.2009, 21:22
Сдается мне, что сама задача поставлена не правильно. Ну да ладно. Если автоинкрементное поле - ключ - то апдейтить или менять его - это самоубийство. Если это не ключ - то навскидку вариант такой - при удалении строки узнаем ее номер, запоминаем, и апдейтим строку с максимальным номер на удаленный. Можно триггер повесить.

Gekka
30.05.2009, 08:30
Сдается мне, что сама задача поставлена не правильно. Ну да ладно. Если автоинкрементное поле - ключ - то апдейтить или менять его - это самоубийство. Если это не ключ - то навскидку вариант такой - при удалении строки узнаем ее номер, запоминаем, и апдейтим строку с максимальным номер на удаленный. Можно триггер повесить.

В общем то да, но есть камушек. Номер следующей замиси он берет из переменной "autoindex", ее тоже нужно будет редактировать.

int18h
15.06.2009, 19:57
C SQL давно не работал, но припоминаю что писали функции, которые пересчитывали ключи. Там есть встроенные какието, погугли в этом ключе...
:)))
не работай с SQL вообще, навсегда...:acute:


по поводу твоей задачи..
смотри: autoincrement поле - есть последовательность, зачем же тебе нарушать эту последовательность..
как правило такое поле используется в качестве ключа, то есть менять его - убить свою базу..
если все таки это не ключ.. давай рассмотрим таблицу размеров в 300000000 записей, причем это будет к примеру портал, к которому люди обращаются постоянно
скажем последовательность идет так
999999 - пред. запись.
1000000 - удалили
1000001 - след запись
представь сколько записей тебе надо перелопатить своей процедурой..
прочитай это [Только зарегистрированные пользователи могут видеть ссылки.]
думаю то что тебе нужно будет