Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Автоинкремент, мускуль

Алексей Ткаченко Мастер (1170), закрыт 13 лет назад
Вопрос по поводу функции AUTO_INCREMENT. Применил для PRIMARY KEY (id). Проявляется интересная особенность. Допустим последний id был равен 30. Я добавил 3 строчки. Их id стали равны 31, 32 и 33 соответсвенно. Затем я эти строчки затер и опять добавил 3. Но вместо того, что последующие три строчки имели id 31, 32, 33, они имеют 34, 35 и 36. Соответственно вопрос, как это исправить.
З.Ы. Так же есть вопрос, но не совсем про инкремент. Когда 3 строки посылаются подряд, они записываются в обратной последовательности в таблицу. Т.е. если посмотреть таблицу запросом SELECT * FROM my_table, я вижу что послдение три строчки идут в обратном порядке.
Лучший ответ
Breathbath Мыслитель (5427) 14 лет назад
скажите а почему это вас так беспокоит? ну пускай себе генерит как ему нужно, вам же нужны уникальные записи. или если нужны реальные последовательные записи, то придется создавать доп поле для них и писать алгоритм их последовательной генерации с учетом удаленных или перемещенных записей
Алексей ТкаченкоМастер (1170) 14 лет назад
Честно? Ну не нравится. В принципе, Вы правы, это не так важно, но все-так раздражает, когда на тестах появляются пробелы по 30-500 строк. Если адекватного решения не найду, тогда оставлю так.
Breathbath Мыслитель (5427) вы знаете я уже спроектировал наверно сотню таблиц с автоинкриментом - и ни разу никакхи проблем с этим не возникало. может стоит сосредоточиться на более практических задачах? если разрабтчики mysql это так реализовали, думаете они дураки?
Остальные ответы
Андрей Высший разум (483141) 14 лет назад
Автоинкремент в твоем случае работае именно так, как должен - для каждой новой записи генерируется уникальный номер.

Автоинкрементные поля используются ТОЛЬКО для создания первичного ключа. Использовать их для других целей - ошибка.

Также, как ошибкой является твой анализ того, в какой последовательности записываются строки. Программа должна быть написана так, чтобы это вообще никакого значения не имело.
Алексей ТкаченкоМастер (1170) 13 лет назад
Автоинкремент я использовал как раз только для первичного ключа. Ест естественно, если он себя так ведет, я не буду делать зависимой программу от него. Вопрос был больше в том почему он так себя ведет и можно ли этого избежать.
Ringo Yuki Мудрец (17933) 14 лет назад
ALTER TABLE t2 AUTO_INCREMENT = value;

но ведь это идиотизм

если вам невмоготу - уберите AUTO_INCREMENT а при вставке ищите в таблице максимальный id добавляйте к нему 1 и вставляйте с этим id
Алексей ТкаченкоМастер (1170) 13 лет назад
Понятно, что можно делать каждый раз запрос, с помощью которого я узнаю сколько всего записей, потом увеличу на единичку. Просто мне казалось, что должна быть какая-та функция в самом MySQL. Но, видимо, разработчики решили, что это не нужно. Но, надо сказать, что в большинстве случаев, это действительно не нужно.
Ringo Yuki Мудрец (17933) просто "политика партии" такая: значение auto_increment поля не важно. важно то что при вставке значения уникальны
С@HT3}{H1K Просветленный (38704) 14 лет назад
Всё работает правильно. Ключевое поле оно и есть ключевое поле. И значение уникально для каждой записи.
Похожие вопросы