![]() |
|
Модераторы: skyboy |
![]()
|
|
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Здравствуйте уважаемые.
Возникла тривиальная задача. Есть таблица, в ней есть поле с идентификаторами. Поле, условно AUTO_INCREMENT (но необязательно) Возникает такая ситуация: В таблице есть записи с id = 1, id =2, id = 3, id =4 (и т.д.) После чего мы удалили записи с id = 2 и id = 3. В соответствии с AUTO_INCREMENT следующая добавленная запись будет иметь id = 5. Но! Тут возникает непростая и странная необходимость - следующая добавленная запись должна иметь id = 2. В связи с чем, обращаюсь к вам с вопросом: Имеется ли в MySQL версии 5.1 функционал позволяющий присваивать вновь добавляемым записям наименьший из удаленных идентификаторов? Если нет, то я так понял, что это должно решаться написанием хранимой функции, перебирающей с наименьшего все id в данной таблице и возвращающей первый недостающий. В правильном ли направлении в данной ситуации мыслю? Спасибо, жду ответов. -------------------- In silico |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Подобные действия идеологически неправильны и находятся в вопиющем противоречии с существующими нормами.
Если нужно - заведи дополнительное поле, и в нём строй непрерывные идентификаторы. А ключевое поле не трогай. PS. Вопрос уже обсуждался - в поиск плиз. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
нет. автоинкрементное поле - это ключ(не совсем корректное тождество, но в том же mysql автоинкрементное поле обязано быть указанным и как primary key), механизм обеспечения целостности. по этой причине в принцип работы этого механизма(последовательное увеличение с игнорированием удаленных значений) вмешиваться без очень-очень-очень уважительных причин не надо. для чего ты это поле используешь, что тебя беспокоят "дырки"? для нумерации при выводе? |
|||
|
||||
| Zerstroer |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
skyboy, нет. Меня не беспокоят "дырки", я в курсе об идеологическом противоречии механизму обеспечения целостности. Я даже думал, что неправильно поставил вопрос, но уважаемый Akina меня все таки неправильно понял. Я говорил о поле AUTO_INCREMENT, как о поле содержащем ИДЕНТИФИКАТОРЫ, а не как о ключевом поле.
Эта таблица не связана по полю id ни с одним другим, т.е. по факту это поле ключом НЕ ЯВЛЯЕТСЯ и являться не будет. Разъясню ситуацию. В этой таблице должна дублироваться информация из некоего файла, заполняемого сторонним приложением. Некое приложение записывает данные в файл, причем там (в файле) есть колонка, идентичная описанному мной id и заполняется она как раз с заполнением "дырок". Моя задача заполнить мою таблицу с использованием такого же принципа заполнения "дырок" как и в программе, заполняющей файл. Надеюсь, всё понятно объяснил. Из
следует, что в Mysql отсутствует механизм генерации идентификаторов с заполнением "дырок". Верно ли я понял? Следовательно:
верное ли решение я принимаю? -------------------- In silico |
||||
|
|||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 5 Всего: 315 |
тогда нечего было путать людей и заводить речь о таком устойчивом понятии, как идентификатор id последуй совету:
всё только назови его не id, а как-то по-другому. просто потому, что любой человек заглянувший в твой код рискует вляпаться и наделать больших делов |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Ну так и берите номера из файла. Зачем делать то, что уже сделано? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
нифига не понятно.
если надо то же, что и в файле - бери из файла. если надо так же, как и в файле - нумеруй уже после выборки. |
|||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Занесение информации в таблицу должно осуществляться исключительно средствами MySQL. У меня есть только доступ к базе и нет доступа к программе. Заполняться таблица будет с помощью триггеров, навешаных на другую таблицу, с которой работает приложение, заполняющее файл. В общем, все действительно хитровымудрено, но на свои изначальные вопросы ответы я уже нашел.
-------------------- In silico |
|||
|
||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Если кому интересно, то написал процедурку под свои извращения, позволяющую выбирать наименьшее пропущенное целое значение из последовательных значений в заданной колонке заданной таблицы.
Скрипт с примером использования в конце.
-------------------- In silico |
|||
|
||||
| Zloxa |
|
||||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 33 Всего: 161 |
Это сообщение отредактировал(а) Zloxa - 18.3.2011, 23:52 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||||
|
|||||||
| Zerstroer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 8.8.2007 Где: Алма-Ата Репутация: нет Всего: 3 |
Zloxa, молча апплодирую стоя в углу на коленях на рассыпаной соли... и плачу от красоты...
Это сообщение отредактировал(а) Zerstroer - 23.3.2011, 13:21 -------------------- In silico |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |