Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/replication-features-auto-increment.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API