| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Экономия id (присваивание удаленных id) |
| Автор: Zerstroer 11.3.2011, 13:29 |
| Здравствуйте уважаемые. Возникла тривиальная задача. Есть таблица, в ней есть поле с идентификаторами. Поле, условно AUTO_INCREMENT (но необязательно) Возникает такая ситуация: В таблице есть записи с id = 1, id =2, id = 3, id =4 (и т.д.) После чего мы удалили записи с id = 2 и id = 3. В соответствии с AUTO_INCREMENT следующая добавленная запись будет иметь id = 5. Но! Тут возникает непростая и странная необходимость - следующая добавленная запись должна иметь id = 2. В связи с чем, обращаюсь к вам с вопросом: Имеется ли в MySQL версии 5.1 функционал позволяющий присваивать вновь добавляемым записям наименьший из удаленных идентификаторов? Если нет, то я так понял, что это должно решаться написанием хранимой функции, перебирающей с наименьшего все id в данной таблице и возвращающей первый недостающий. В правильном ли направлении в данной ситуации мыслю? Спасибо, жду ответов. |
| Автор: Akina 11.3.2011, 14:11 |
| Подобные действия идеологически неправильны и находятся в вопиющем противоречии с существующими нормами. Если нужно - заведи дополнительное поле, и в нём строй непрерывные идентификаторы. А ключевое поле не трогай. PS. Вопрос уже обсуждался - в поиск плиз. |
| Автор: skyboy 11.3.2011, 14:15 |
нет. автоинкрементное поле - это ключ(не совсем корректное тождество, но в том же mysql автоинкрементное поле обязано быть указанным и как primary key), механизм обеспечения целостности. по этой причине в принцип работы этого механизма(последовательное увеличение с игнорированием удаленных значений) вмешиваться без очень-очень-очень уважительных причин не надо. для чего ты это поле используешь, что тебя беспокоят "дырки"? для нумерации при выводе? |
| Автор: bars80080 12.3.2011, 00:30 | ||||
тогда нечего было путать людей и заводить речь о таком устойчивом понятии, как идентификатор id последуй совету:
всё только назови его не id, а как-то по-другому. просто потому, что любой человек заглянувший в твой код рискует вляпаться и наделать больших делов |
| Автор: Akina 12.3.2011, 10:13 | ||
Ну так и берите номера из файла. Зачем делать то, что уже сделано? |
| Автор: skyboy 12.3.2011, 12:39 |
| нифига не понятно. если надо то же, что и в файле - бери из файла. если надо так же, как и в файле - нумеруй уже после выборки. |
| Автор: Zerstroer 13.3.2011, 09:45 |
| Занесение информации в таблицу должно осуществляться исключительно средствами MySQL. У меня есть только доступ к базе и нет доступа к программе. Заполняться таблица будет с помощью триггеров, навешаных на другую таблицу, с которой работает приложение, заполняющее файл. В общем, все действительно хитровымудрено, но на свои изначальные вопросы ответы я уже нашел. |
| Автор: Zerstroer 18.3.2011, 23:36 | ||
| Если кому интересно, то написал процедурку под свои извращения, позволяющую выбирать наименьшее пропущенное целое значение из последовательных значений в заданной колонке заданной таблицы. Скрипт с примером использования в конце.
|
| Автор: Zloxa 18.3.2011, 23:52 | ||||||
|
| Автор: Zerstroer 23.3.2011, 13:19 |
| Zloxa, молча апплодирую стоя в углу на коленях на рассыпаной соли... и плачу от красоты... |