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

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

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

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

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

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

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

ясно. Спасибо. )
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.10.2016, 23:42
    #39324914
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
miksoftУ InnoDB есть свойство - при рестарте MySQL автоинкремент устанавливается в MAX(id)+1
Я как раз на эту особенность и напоролся, после перезагрузки сервера AUTO_INCREMENT сбросился в 1 в таблице, где были удалены все строки.
А где про это свойство написано, не подскажите?
...
Рейтинг: 0 / 0
11.10.2016, 23:54
    #39324917
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
И можно ли как то это отменить?
Имеется в виду, сброс AUTO_INCREMENT после перезапуска сервера?
...
Рейтинг: 0 / 0
11.10.2016, 23:55
    #39324918
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
PosohovА где про это свойство написано, не подскажите?Хм, я же дал ссылку почти 6 лет назад. Она хотя и редиректится на документацию по современной версии MySQL, но все еще актуальна.
...
Рейтинг: 0 / 0
11.10.2016, 23:57
    #39324919
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
PosohovИ можно ли как то это отменить?
Имеется в виду, сброс AUTO_INCREMENT после перезапуска сервера?Пока - нет, да и незачем.
В будущем можно будет перейти на версию 8.0, там это поведение изменено.
...
Рейтинг: 0 / 0
12.10.2016, 10:41
    #39325082
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
miksoftPosohovИ можно ли как то это отменить?
Имеется в виду, сброс AUTO_INCREMENT после перезапуска сервера?Пока - нет, да и незачем.
В будущем можно будет перейти на версию 8.0, там это поведение изменено.
Как это незачем?
Я, например, переношу все данные из одной таблицы в другую, в том числе поле с AI, и горя не знал, пока сервер не перезагрузил.
А теперь как?
Все время вручную отслеживать какой ID писать при вставке новой записи в таблицу, чтобы при очередном переносе дубля ID не возникло?
...
Рейтинг: 0 / 0
12.10.2016, 20:20
    #39325661
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
PosohovКак это незачем?
Я, например, переношу все данные из одной таблицы в другую, в том числе поле с AI, и горя не знал, пока сервер не перезагрузил.
А теперь как?
Все время вручную отслеживать какой ID писать при вставке новой записи в таблицу, чтобы при очередном переносе дубля ID не возникло?Так прямо вместе с ID и переносите. Все равно в последовательности ID будут пропуски и при независимой генерации автоинкремента в разных таблицах идентификаторы разъедутся.
...
Рейтинг: 0 / 0
12.10.2016, 20:37
    #39325667
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
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
12.10.2016, 20:46
    #39325673
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
Posohov,

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

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

PS
А откуда известно, что AI в MySQL 8.0 они сбрасывать больше не будут и в чем была причина?
...
Рейтинг: 0 / 0
12.10.2016, 21:19
    #39325684
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
Вся ценность AI состояла в том, что его значение никогда не убывает и в этом была гарантия от повторов.
Теперь же, после сброса AI, получили только экономию чисел и невозможность переносить строки с ID в другие таблицы.
...
Рейтинг: 0 / 0
12.10.2016, 23:20
    #39325740
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
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
12.10.2016, 23:29
    #39325744
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
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
13.10.2016, 12:20
    #39326142
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
miksoftЕсли последнюю запись не удалять, то почему же уменьшится?
В этом то весь бред и состоит, что теперь так или иначе нужно самому вручную следить за AI.
Какой тогда в нем смысл?
Ведь смысл AI в том, чтобы он автоматически увеличивался и потому за ним следить не надо, а если он может по воле сервера уменьшится, то смысл его пропадает совсем.

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

PS
Все это похоже на откровенное вредительство, чтобы перетянуть клиентов на платный MySQL.
Хотя не знаю, как там обстоят дела с AI, может те же проблемы, только решаемые уже за отдельную плату.
...
Рейтинг: 0 / 0
13.10.2016, 13:45
    #39326249
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
Особенно в 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
13.10.2016, 14:14
    #39326292
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
PosohovВ том то и дело, что после сброса AI переносить строки с ID уже не получится
Ну так не нумеруйте их в промежуточной таблице, нумеруйте уже в конечной, из которой они не удаляются.
...
Рейтинг: 0 / 0
13.10.2016, 15:07
    #39326374
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
Dimitry SibiryakovНу так не нумеруйте их в промежуточной таблице
Честно говоря, не понятно о чем это?
Не нумеровать - это как?
Создавать строки без ID? А как их потом находить?
...
Рейтинг: 0 / 0
13.10.2016, 16:11
    #39326426
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
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
13.10.2016, 18:44
    #39326576
Posohov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
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
16.10.2016, 08:18
    #39327684
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сбрасывается значение AUTO_INCREMENT
Posohov.... опять не поломают истинное предназначение AI.вы примите и поймите АКСИОМУ - автоинкремент не для нумерации или какого то счетчика, а для примари Кей, за которым следить не нужно. Соответственно менять его самому не нужно.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сбрасывается значение AUTO_INCREMENT / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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