Другие языки программирования и технологии
Вопрос по полю в MySQL
Добрый вечер. Мне нужна помощь. Возможно ли в MySQL создать толбец, который всегда будет занимать первое пустое числовое значение? Т.е., допустим, auto_increment работает так: Я поставил столбцу ID это значение. Он будет заполняться так: 1 2 3 ... 182 183 184 185 Допустим, я удалил поле с ID 183. Но если я создам новое поле, то ему будет присвоено не 183 а 186, т.е. увеличится максимальное число ID на единицу. Мне же надо, что бы ему присвоилось первое пропущенное значение, т.е. 183. Как это сделать?
Никак. Можно навесить триггеры, но тогда это поле перестанет быть PK и обязательным. Можно сделать отдельное поле типа sub_id, в которое записывать данные в триггере, повешенном на инсерт.
У таблиц есть два типа первичных ключей. Первый - фактический. Это например так.
Таблица "города" ID, Name
MSK, Moscow
SPB, Санкт-Петербург
MNSK, Минск
В этом случае поле ID редактируется оператором. Указав код MSK в таблице ищется MSK.
Есть ещё суррогатные ключи. Это у вас стоит генератор чисел, и он подставляет ID следующий за выданным в последний раз.
Лучше всего работают суррогатные ключи, потому что нет риска что значение будет случайно отредактировано при работе оператора. Пострадают внешние связи.. . Больше ни для чего этот ID не применяется. Не важно что там, 543434 или красивое 125 следующее за 124.
Таблица "города" ID, Name
MSK, Moscow
SPB, Санкт-Петербург
MNSK, Минск
В этом случае поле ID редактируется оператором. Указав код MSK в таблице ищется MSK.
Есть ещё суррогатные ключи. Это у вас стоит генератор чисел, и он подставляет ID следующий за выданным в последний раз.
Лучше всего работают суррогатные ключи, потому что нет риска что значение будет случайно отредактировано при работе оператора. Пострадают внешние связи.. . Больше ни для чего этот ID не применяется. Не важно что там, 543434 или красивое 125 следующее за 124.
можно но не нужно
не нужно - получается существенная нагрузка на сервис
можно через скрипт php & mysql увеличивать переменную и сверять
не нужно - получается существенная нагрузка на сервис
можно через скрипт php & mysql увеличивать переменную и сверять
Хо-хо.. . Не знаю, может как-то и можно это делать "без лишнего кода", но мне что-то выхода не видится, кроме как при удалении записи где-то сохранять ID удалённой записи, после чего, при добавлении записи, принудительно менять ID на сохранённый ID.
___________
upd: не надо ничего перебирать! Если нет желания сохранять ID удаляемой строки во внешний файл, то можно поступить вот как.. . Сделать таблицу, состоящую из одного поля, числового. И при удалении записи в основной таблице, загонять ID удаляемой записи во вторую таблицу. После чего делать примерно такой алгоритм на добавление записи.
ЕСЛИ кол-во записей во второй таблице больше 0, ТО ID добавляемой записи равен ПЕРВАЯ_ЗАПИСЬ_ВТОРОЙ _ТАБЛИЦЫ, после чего первую запись второй таблицы удаляем. Как-то так, да.
___________
upd: не надо ничего перебирать! Если нет желания сохранять ID удаляемой строки во внешний файл, то можно поступить вот как.. . Сделать таблицу, состоящую из одного поля, числового. И при удалении записи в основной таблице, загонять ID удаляемой записи во вторую таблицу. После чего делать примерно такой алгоритм на добавление записи.
ЕСЛИ кол-во записей во второй таблице больше 0, ТО ID добавляемой записи равен ПЕРВАЯ_ЗАПИСЬ_ВТОРОЙ _ТАБЛИЦЫ, после чего первую запись второй таблицы удаляем. Как-то так, да.
Похожие вопросы
- Вопрос по работе с MySQL через PHP и/или JavaScript
- БД MySQL Что лучше? В одно поле запихнуть похожую информацию или создать много полей?
- MySql в чем плюсы? Почему не обойтись?
- Один вопрос оп PHP&MySQL
- PHP и MySQL. Пишу вот такой код, как в книге написано, но не работает. В чем причина?
- Помогите с MySQL
- Вопрос про MySQL. Собрался изучать MySQL к чему он прикручивается?
- Подробная установка связки Apache 2.0 + Php 5.1.4 + Mysql Server 4.1.16 под Win32 платформу
- Возникает ошибка в php mySQL. Подскажите, плиз.
- Работа с# и MySql