powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сбрасывается значение AUTO_INCREMENT
25 сообщений из 29, страница 1 из 2
Сбрасывается значение AUTO_INCREMENT
    #36976997
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помню была тема - у человека сбрасывался AUTO_INCREMENT для таблицы при каких-то условиях. Кто-нибудь может подкинуть ссылку? Не смог найти по форуму.

Столкнулся уже два раза, не могу отловить конкретную причину.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #36977036
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сбрасывается в ноль?

У InnoDB есть свойство - при рестарте MySQL автоинкремент устанавливается в MAX(id)+1
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #36977352
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

у меня табличка пустая, из неё данные переносятся в другую табличку. При сбросе AI в 0 после рестарта, соответственно, при переносе возникает ошибка PK constaintа.

В той теме как-нибудь победили такое поведение или резюмировали, что это баг, а не фича? Думаю - надо ли в старт СУБД закладывать обновление AUTO_INCREMENT для этой таблицы или есть менее костыльное решение?
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #36977370
schizophrenic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymу меня табличка пустая, из неё данные переносятся в другую табличку
Невозможно переместить то чего нет!
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #36977403
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymmiksoft,

у меня табличка пустая, из неё данные переносятся в другую табличку. При сбросе AI в 0 после рестарта, соответственно, при переносе возникает ошибка PK constaintа.

В той теме как-нибудь победили такое поведение или резюмировали, что это баг, а не фича? Думаю - надо ли в старт СУБД закладывать обновление AUTO_INCREMENT для этой таблицы или есть менее костыльное решение?Если речь именно о том, о чем я говорил , то это документированная фича .
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #36977518
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

ясно. Спасибо. )
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Сбрасывается значение AUTO_INCREMENT
    #39324914
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftУ InnoDB есть свойство - при рестарте MySQL автоинкремент устанавливается в MAX(id)+1
Я как раз на эту особенность и напоролся, после перезагрузки сервера AUTO_INCREMENT сбросился в 1 в таблице, где были удалены все строки.
А где про это свойство написано, не подскажите?
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39324917
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И можно ли как то это отменить?
Имеется в виду, сброс AUTO_INCREMENT после перезапуска сервера?
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39324918
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PosohovА где про это свойство написано, не подскажите?Хм, я же дал ссылку почти 6 лет назад. Она хотя и редиректится на документацию по современной версии MySQL, но все еще актуальна.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39324919
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PosohovИ можно ли как то это отменить?
Имеется в виду, сброс AUTO_INCREMENT после перезапуска сервера?Пока - нет, да и незачем.
В будущем можно будет перейти на версию 8.0, там это поведение изменено.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325082
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftPosohovИ можно ли как то это отменить?
Имеется в виду, сброс AUTO_INCREMENT после перезапуска сервера?Пока - нет, да и незачем.
В будущем можно будет перейти на версию 8.0, там это поведение изменено.
Как это незачем?
Я, например, переношу все данные из одной таблицы в другую, в том числе поле с AI, и горя не знал, пока сервер не перезагрузил.
А теперь как?
Все время вручную отслеживать какой ID писать при вставке новой записи в таблицу, чтобы при очередном переносе дубля ID не возникло?
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325661
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PosohovКак это незачем?
Я, например, переношу все данные из одной таблицы в другую, в том числе поле с AI, и горя не знал, пока сервер не перезагрузил.
А теперь как?
Все время вручную отслеживать какой ID писать при вставке новой записи в таблицу, чтобы при очередном переносе дубля ID не возникло?Так прямо вместе с ID и переносите. Все равно в последовательности ID будут пропуски и при независимой генерации автоинкремента в разных таблицах идентификаторы разъедутся.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325667
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftТак прямо вместе с ID и переносите. Все равно в последовательности ID будут пропуски и при независимой генерации автоинкремента в разных таблицах идентификаторы разъедутся.
В том то и дело, что после сброса AI переносить строки с ID уже не получится, потому как новые ID будут повторять те, что уже перенесены.
Пример:
1. Все строки с ID (1,2,3,4,5) перенес в другую таблицу.
2. Сервер перезагрузился и обнулил AI в пустой таблице.
3. Вставляю новые пять строк - получаю те же ID через AI, что и были (1,2,3,4,5)
4. Результат: переносить эти строки с ID уже нельзя, т.к. в приемной таблице строки с такими ID уже есть.

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

Вот в чем проблема!
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325673
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posohov,

А, понял, при переносе записей вы исходную таблицу хотите очищать.
Ну тут да, напрямую не получится.
Либо используйте обходные варианты (например, удалять в исходной таблице все записи, кроме последней, или резервировать ID в целевой таблице при вставке в исходную), либо вообще пересматривайте схему БД (не факт, что этот перенос реально нужен).
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325679
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftPosohov,
А, понял, при переносе записей вы исходную таблицу хотите очищать.
Ну тут да, напрямую не получится.
Либо используйте обходные варианты (например, удалять в исходной таблице все записи, кроме последней, или резервировать ID в целевой таблице при вставке в исходную), либо вообще пересматривайте схему БД (не факт, что этот перенос реально нужен).
Даже если и не очищать исходную таблицу, всегда есть момент, когда AI при сбросе просто уменьшится и опять в исходной таблице будет повтор значений.
А перенос реально нужен, таким образом я сбрасываю текущие данные в архив, а если их не сбрасывать, а просто метить в этой же таблице, то при разрастании таблицы выборка текущих данных будет происходить все медленнее и медленнее.
Ну это уже проблема другого рода.

Я вот хотел бы знать, на кой ляд они стали сбрасывать AI только после перезагрузки сервера, а не сразу после удаления строк с последними ID, если уж им так приспичило экономить числа AI?
Или у них какая другая была философия в этом вопросе?

PS
А откуда известно, что AI в MySQL 8.0 они сбрасывать больше не будут и в чем была причина?
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325684
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вся ценность AI состояла в том, что его значение никогда не убывает и в этом была гарантия от повторов.
Теперь же, после сброса AI, получили только экономию чисел и невозможность переносить строки с ID в другие таблицы.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325740
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PosohovДаже если и не очищать исходную таблицу, всегда есть момент, когда AI при сбросе просто уменьшится и опять в исходной таблице будет повтор значений.Если последнюю запись не удалять, то почему же уменьшится?
Posohovпри разрастании таблицы выборка текущих данных будет происходить все медленнее и медленнее.В общем случае - не факт. Сильно зависит от того, какая именно выборка. В ряде случаев решается без переноса правильными индексами или секционированием.
PosohovЯ вот хотел бы знать, на кой ляд они стали сбрасывать AI только после перезагрузки сервера, а не сразу после удаления строк с последними ID, если уж им так приспичило экономить числа AI?
Или у них какая другая была философия в этом вопросе?Как я понимаю - чтобы не создавать узкого места при вставке записей. Ведь этот счетчик нужно на диск писать каждый раз.
PosohovА откуда известно, что AI в MySQL 8.0 они сбрасывать больше не будут и в чем была причина? http://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-0.html InnoDB: The current maximum auto-increment counter value is now written to the redo log each time the value changes, and it is saved to an engine-private system table on each checkpoint. These changes make the current maximum auto-increment counter value persistent across server restarts. Additionally:

A server restart no longer cancels the effect of the AUTO_INCREMENT = N table option. If you initialize the auto-increment counter to a specific value, or if you alter the auto-increment counter value to a larger value, the new value is persisted across server restarts.

A server restart immediately following a ROLLBACK operation no longer results in the reuse of auto-increment values that were allocated to the rolled-back transaction.

If you modify an AUTO_INCREMENT column value to a value larger than the current maximum auto-increment value (in an UPDATE operation, for example), the new value is persisted, and subsequent INSERT operations allocate auto-increment values starting from the new, larger value.

For more information, see AUTO_INCREMENT Handling in InnoDB, and InnoDB AUTO_INCREMENT Counter Initialization.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39325744
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-0.html InnoDB: The current maximum auto-increment counter value is now written to the redo log each time the value changesКстати, любопытно, как это будет сочетаться с innodb_flush_log_at_trx_commit=2 или 0.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39326142
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftЕсли последнюю запись не удалять, то почему же уменьшится?
В этом то весь бред и состоит, что теперь так или иначе нужно самому вручную следить за AI.
Какой тогда в нем смысл?
Ведь смысл AI в том, чтобы он автоматически увеличивался и потому за ним следить не надо, а если он может по воле сервера уменьшится, то смысл его пропадает совсем.

miksoftКак я понимаю - чтобы не создавать узкого места при вставке записей. Ведь этот счетчик нужно на диск писать каждый раз.
А какое тут узкое место может быть?
И что за беда писать счетчик на диск?
И разве до перезагрузки сервера они его не пишут на диск? В памяти что ли держат?
Вы же сами видите, что в MySQL 8.0 они вернули истинный смысл AI, исправно записывают его на диск и не трогают ни при каких обстоятельствах, даже если вы сами его изменили.

PS
Все это похоже на откровенное вредительство, чтобы перетянуть клиентов на платный MySQL.
Хотя не знаю, как там обстоят дела с AI, может те же проблемы, только решаемые уже за отдельную плату.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39326249
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Особенно в MySQL 8.0 мне понравилось вот это:
If you modify an AUTO_INCREMENT column value to a value larger than the current maximum auto-increment value (in an UPDATE operation, for example), the new value is persisted, and subsequent INSERT operations allocate auto-increment values starting from the new, larger value.
В MySQL 5.6 я с этой проблемой тоже столкнулся, когда вручную увеличил значение столбца с AI, а сервер продолжал считать по своему и мне приходилось дополнительно обновлять еще и AI с помощью ALTER TABLE table AUTO_INCREMENT = N, теперь как я понял, этого делать не придется.
Собственно AUTO_INCREMENT таким и должен быть ВСЕГДА, просто по определению.

PS
Теперь с нетерпением буду ждать выхода 8-ки, хотя не факт, что они и там, начиная с какой нибудь версии 8.1 опять не поломают истинное предназначение AI.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39326292
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PosohovВ том то и дело, что после сброса AI переносить строки с ID уже не получится
Ну так не нумеруйте их в промежуточной таблице, нумеруйте уже в конечной, из которой они не удаляются.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39326374
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovНу так не нумеруйте их в промежуточной таблице
Честно говоря, не понятно о чем это?
Не нумеровать - это как?
Создавать строки без ID? А как их потом находить?
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39326426
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PosohovИ разве до перезагрузки сервера они его не пишут на диск? В памяти что ли держат?Во всех старых и текущих версиях - да, в памяти. http://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-handling.html This counter is stored only in main memory, not on disk.
PosohovИ что за беда писать счетчик на диск?Лишний ввод-вывод. Причем писать придется в разные места - в REDO и в таблицу.

PosohovВ MySQL 5.6 я с этой проблемой тоже столкнулся, когда вручную увеличил значение столбца с AI, а сервер продолжал считать по своему и мне приходилось дополнительно обновлять еще и AI с помощью ALTER TABLE table AUTO_INCREMENT = N, теперь как я понял, этого делать не придется.Не должно такого быть. http://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html When you insert any other value into an AUTO_INCREMENT column, the column is set to that value and the sequence is reset so that the next automatically generated value follows sequentially from the inserted value.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39326576
Posohov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНе должно такого быть. http://dev.mysql.com/doc/refman/5.6/en/numeric-type-attributes.html When you insert any other value into an AUTO_INCREMENT column, the column is set to that value and the sequence is reset so that the next automatically generated value follows sequentially from the inserted value.
Это только при вставке строки, а при обновлении ID на больше самого большого, AI не увеличивается, а в 8.0 увеличивается.
http://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-0.html If you modify an AUTO_INCREMENT column value to a value larger than the current maximum auto-increment value (in an UPDATE operation, for example), the new value is persisted, and subsequent INSERT operations allocate auto-increment values starting from the new, larger value.
На 5.6 AI работает так (сам только что проверил):
1. Имеем две записи с ID (1,2).
2. Обновляем ID=2 на ID=10.
3. Вставляем новую запись с AI - получаем новую строку с ID = 3.
4. Вставляем новую запись с ID = 9 - все ОК!
5. Вставляем новую запись с AI - получаем ошибку, ID=10 уже есть.
6. Вставляем новую запись с AI - получаем новую строку с ID = 11.

Вывод: даже при ошибке вставки, AI увеличивается на 1.
...
Рейтинг: 0 / 0
Сбрасывается значение AUTO_INCREMENT
    #39327684
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Posohov.... опять не поломают истинное предназначение AI.вы примите и поймите АКСИОМУ - автоинкремент не для нумерации или какого то счетчика, а для примари Кей, за которым следить не нужно. Соответственно менять его самому не нужно.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сбрасывается значение AUTO_INCREMENT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]