19.5.1.1 Репликация и AUTO_INCREMENT
Базирующаяся на операторах репликация значений AUTO_INCREMENT, LAST_INSERT_ID() и TIMESTAMP выполняется с учетом следующих исключений:
Оператор, вызывающий триггер или функцию, которая приводит к обновлению столбца
AUTO_INCREMENT, не реплицируется корректно при использовании репликации на основе операторов. Эти операторы помечены как небезопасные. (Ошибка #45677)-
Оператор
INSERTв таблицу, имеющую составной первичный ключ, который включает столбецAUTO_INCREMENT, который не является первым столбцом этого составного ключа, небезопасен для ведения журнала на основе операторов или репликации. Эти операторы помечены как небезопасные. (Ошибка #11754117, Ошибка #45670)Эта проблема не затрагивает таблицы, использующие движок хранения
InnoDB, поскольку таблицаInnoDBсо столбцом AUTO_INCREMENT требует по крайней мере одного ключа, где столбец автоинкремента является единственным или крайним левым столбцом. -
Добавление столбца
AUTO_INCREMENTв таблицу сALTER TABLEможет не привести к тому же порядку строк на реплике и источнике. Это происходит, потому что порядок, в котором строки нумеруются, зависит от используемого движка хранения для таблицы и порядка вставки строк. Если важно сохранить одинаковый порядок на источнике и реплике, строки должны быть отсортированы перед назначением номераAUTO_INCREMENT. Предполагая, что вы хотите добавить столбецAUTO_INCREMENTв таблицуt1, имеющую столбцыcol1иcol2, следующие операторы создадут новую таблицуt2, идентичную таблицеt1, но с добавленным столбцомAUTO_INCREMENT:CREATE TABLE t2 LIKE t1; ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY; INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2;
ВажноДля гарантии сохранения одинакового порядка на источнике и реплике, в операторе
ORDER BYнеобходимо указать все столбцы таблицыt1.Данные инструкции подлежат ограничениям, накладываемым оператором
CREATE TABLE ... LIKE: определения внешних ключей игнорируются, также как и параметры таблицыDATA DIRECTORYиINDEX DIRECTORY. Если определение таблицы содержит какие-либо из этих характеристик, создайтеt2с помощью оператораCREATE TABLE, идентичного оператору создания таблицыt1, но с добавлением столбцаAUTO_INCREMENT.Независимо от метода создания и заполнения копии с столбцом
AUTO_INCREMENT, последним шагом является удаление исходной таблицы и переименование копии:DROP t1; ALTER TABLE t2 RENAME t1;
См. также Раздел B.3.6.1, «Проблемы с ALTER TABLE».
© 2025 Oracle
Licensed under the GPLv2 License.