Spec-Zone .ru
спецификации, руководства, описания, API
|
Основанная на операторе репликация AUTO_INCREMENT
, LAST_INSERT_ID()
, и TIMESTAMP
значения делаются правильно согласно следующим исключениям:
При использовании основанной на операторе репликации до MySQL 5.7.1, AUTO_INCREMENT
столбцы в таблицах на ведомом устройстве должны
соответствовать те же самые столбцы на ведущем устройстве; то есть, AUTO_INCREMENT
столбцы должны быть тиражированы в AUTO_INCREMENT
столбцы.
Оператор, вызывающий триггер или функцию, которая вызывает обновление к AUTO_INCREMENT
столбец не тиражируется, правильно используя основанную на
операторе репликацию. В MySQL 5.7 такие операторы отмечаются как опасные. (Ошибка #45677)
INSERT
в таблицу, у которой есть составной первичный ключ, который
включает AUTO_INCREMENT
столбец, который не является первым столбцом этого
составного ключа, не безопасен для основанного на операторе журналирования или репликации. В MySQL 5.7 и
позже, такие операторы отмечаются как опасные. (Ошибка #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
использование a CREATE
TABLE
оператор, который идентичен тому, используемому, чтобы создать t1
, но с добавлением AUTO_INCREMENT
столбец.
Независимо от метода, используемого, чтобы создать и заполнить копию, имеющую AUTO_INCREMENT
столбец, заключительный шаг должен отбросить исходную таблицу и затем переименовать копию:
DROP t1;ALTER TABLE t2 RENAME t1;
См. также Раздел C.5.7.1, "Проблемы с ALTER TABLE
".