HitForum - Форумы Мариупольской Городской Сети

HitForum - Форумы Мариупольской Городской Сети (http://hitforum.net.ua/index.php)
-   Скрипты (http://hitforum.net.ua/forumdisplay.php?f=96)
-   -   Очередной вопрос по MYSQL (http://hitforum.net.ua/showthread.php?t=45267)

maddy 03.05.2009 01:43

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

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

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

voland 03.05.2009 10:25

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

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

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

Madga 03.05.2009 11:55

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

Makar 06.05.2009 22:22

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

Gekka 30.05.2009 09:30

Ответ: Очередной вопрос по MYSQL
 
Цитата:

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

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

int18h 15.06.2009 20:57

Ответ: Очередной вопрос по MYSQL
 
Цитата:

Сообщение от Madga (Сообщение 631560)
C SQL давно не работал, но припоминаю что писали функции, которые пересчитывали ключи. Там есть встроенные какието, погугли в этом ключе...

:)))
не работай с SQL вообще, навсегда...:acute:


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


Часовой пояс GMT +3, время: 17:12.

Работает на vBulletin® версия 3.7.0.
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Перевод: zCarot
© 2003 - HitLine.