2014-01-19 5 views
0

У меня есть таблица SQL, в которой хранятся разные данные. И первичный ключ имеет целочисленное значение, которое увеличивается 1 вводится одна новая информация. Пока мы продолжаем добавлять его, все прекрасно. Но когда мы удаляем любое значение центра или конечное значение, это вызывает проблемы.Как автоматическое увеличение и автоматическое изменение значения столбца базы данных

например, я добавил 5 строк в таблицу. И столбец sr_num имеет значение 5. И когда я удаляю 4-ю запись, столбец sr_num остается следующим: 1,2,3,5.

Я хочу, чтобы это было 1,2,3,4, как только я удаляю четвертую запись, я хочу, чтобы пятый из них занял 4-ю позицию и тот же номер.

Это должно произойти со всеми.

+5

Вы уверены, что хотите что-то подобное? Это означает, что вы должны ** вручную обновить эту таблицу **. Вручную обновите все таблицы с помощью отношения с этим (и так далее, каскадом). Кроме того, ваш индекс будет признан недействительным. Могу ли я спросить ** причину этого **? Это неправильное использование и значение первичного ключа, если вы хотите, чтобы прогрессивный индекс просто использовал 'ROW_NUMBER()' в вашем 'SELECT' ... –

+1

Если вы удалите строку и поместите другую с тем же ключом на своем месте, что также вызовет проблемы. Теперь у вас есть две логические строки для одного и того же ключа. Ключи не следует повторно использовать после того, как они были замечены кем-то другим (пользователем). – usr

+0

Смотрите это: http://stackoverflow.com/questions/2214141/mysql-auto-increment-after-delete?rq=1 – dursk

ответ

1

Нет. Это не то, для чего используется ваш первичный ключ. Это только для логической ссылки, чтобы обеспечить уникальность. Вы должны мысленно игнорировать тот факт, что он использует целое число. @Adriano и @marc_s являются правильными. Отпустите идею о том, что вы можете/должны перенумеровать ваши первичные значения ключа. Есть несколько редких случаев, когда вы можете это рассмотреть, но это не один из тех редких случаев.

Вместо этого вы можете настроить запрос (или представление), который использует ROW_NUMBER() в вашем запросе (как упоминалось @Adriano). Затем вы будете иметь свои последовательные номера, не вмешиваясь в свои первичные значения. Обычно люди называют это порядковой колонкой или просто ордом.

0

Плохая идея, которой вы хотите.

пример: ваш sr_num имеет внешний ключ другой таблицы, как только вы обновить sr_num вам нужно обновить другую таблицу с тем же значение, как sr_num тоже.

Смежные вопросы