Я использовал InnoDB для проекта и полагался на auto_increment. Это не проблема для большинства таблиц, но для таблиц с удалением, это могло бы быть проблемой:
Обработка AUTO_INCREMENT в InnoDB
особенно эта часть:
Столбец AUTO_INCREMENT, названный ai_col: После запуска сервера, для первой вставки в таблицу t, InnoDB выполняет эквивалент этого оператора: ВЫБЕРИТЕ МАКСА (ai_col) ИЗ t FOR UPDATE; InnoDB увеличивает одним значение, полученное оператором, и присваивает его столбцу и автоинкрементному счетчику для таблицы.
Это - проблема потому что, в то время как она гарантирует, что в таблице, ключ уникален, существуют внешние ключи к этой таблице, где те ключи больше не уникальны.
mysql сервер/должен не часто, перезапускают, но это повреждается. Есть ли какие-либо простые способы вокруг этого?
Если у вас ограничение постороннего ключа, как можно удалить строку из таблицы A, когда таблица B ссылается на эту строку? Мне это кажется ошибкой.
Независимо от этого, вы можете избежать повторного использования значений автоинкремента, сбросив смещение при запуске резервной копии вашего приложения. Запрос на максимальное значение во всех таблицах, которые ссылаются на таблицу A, затем измените таблицу выше этого максимального значения, например, если максимальное значение равно 989, используйте следующее:
alter table TableA auto_increment=999;
Также остерегайтесь, что разные MySQL движки имеют разное поведение автоинкремента. Этот трюк работает для InnoDB.
.Итак, у вас две таблицы:
TableA
A_ID [PK]
и
TableB
B_ID [PK]
A_ID [FK, TableA.A_ID]
А в TableB значение A_ID не уникально? Или в TableB.A_ID есть значение, которого нет в TableA.A_ID?
Если вам нужно, чтобы значение TableB.A_ID было уникальным, то вам нужно добавить ограничение UNIQUE в этот столбец.
Или я все еще что-то пропустил?
.Использовать ограничение по внешнему ключу с 'SET NULL' для обновления и удаления.
.Создайте другую таблицу со столбцом, который запоминает последний созданный идентификатор. Таким образом, вам не нужно заботиться о максимальных значениях в новых таблицах, которые имеют это как внешний ключ.