Значение автоматического приращения осталось позади / ниже фактических значений

Возможно ли, что в какой-то момент у таблицы были идентификаторы выше, чем текущее значение AUTO_INCREMENT?

У меня есть таблица, которая действует как очередь. Я вставляю/удаляю 10-30 строк в секунду, и мне нужен столбец с автоматическим приращением, чтобы продолжать работу. Когда я сейчас вставляю строки, я получаю переработанный автоматический приращение (id), например: 374097.

Вот таблица:

CREATE TABLE `test_table` (
    `id` INT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
COLLATE='utf8_bin'
ENGINE=InnoDB
AUTO_INCREMENT=374098;

Есть еще одна таблица, которая использует этот id в качестве внешнего ключа.

SELECT max(batch_id) from secondary_table;

Возвращает: 397959. В какой-то момент у test_table были идентификаторы до 397959, а AUTO_INCREMENT намного ниже!

Я читал об этом на https://dev.mysql.com/doc/refman/8.0/en/replication-features-auto-increment.html и я должен быть в безопасности - AUTO_INCREMENT устанавливается для простого первичного ключа.

Любая идея, могу ли я продолжать использовать AUTO_INCREMENT таким образом, или мне нужно использовать собственный идентификатор?


person Buffalo    schedule 27.08.2018    source источник
comment
Какая у вас версия mysql?   -  person P.Salmon    schedule 27.08.2018
comment
Вы должны прочитать это serverfault.com /questions/228690/ и обратитесь к руководству для вашей версии mysql.   -  person P.Salmon    schedule 27.08.2018
comment
@P.Salmon: ты прав, я пропустил это. На самом деле это AWS Aurora, который, как мне показалось, является последней версией MySQL с некоторыми настройками, но на самом деле совместим с MySQL 5.7.   -  person Buffalo    schedule 27.08.2018


Ответы (1)


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

ALTER TABLE test_table AUTO_INCREMENT = 397959 + 1
person Jérome S.    schedule 27.08.2018
comment
Я знаю, как это исправить, проблема шире, мне нужно знать, правильно ли я делаю, иначе я рискую столкнуться с той же проблемой позже. - person Buffalo; 27.08.2018
comment
использование автоматического увеличения безопасно, даже если этот идентификатор используется в другой таблице в качестве внешнего ключа. дело в том, как вы делаете, чтобы получить более высокий Foreign_id во второй таблице, чем исходный автоматический приращение. - person Jérome S.; 28.08.2018
comment
Проблема в другом. Foreign_id был правильным, пока auto_increment не был немного откатан назад, потому что, вероятно, идентификаторы больше не были в таблице при перезапуске mysql. - person Buffalo; 30.08.2018
comment
это должно быть другое: да, конечно, автоматическое увеличение является неотъемлемой частью таблицы: принцип ACID (начиная с MySQL 8.0). вы можете увидеть это с помощью: SELECT TABLE_NAME,AUTO_INCREMENT FROM information_schema.TABLES - person Jérome S.; 31.08.2018