16.4.1.6 Репликация инструкций CREATE TABLE ... SELECT
В этом разделе рассматривается, как MySQL реплицирует инструкции CREATE
TABLE ... SELECT.
MySQL 5.7 не допускает, чтобы инструкция CREATE
TABLE ... SELECT вносила изменения в таблицы, помимо той, которая создаётся данной инструкцией. Некоторые более старые версии MySQL разрешали это. Это означает, что при использовании репликации между репликой MySQL 5.6 или более поздней версии и источником, использующим предыдущую версию MySQL, инструкция CREATE
TABLE ... SELECT, вызывающая изменения в других таблицах на источнике, завершается ошибкой на реплике, что приводит к остановке репликации. Чтобы предотвратить это, следует использовать репликацию на основе строк, переписать проблемную инструкцию перед её запуском на источнике или обновить источник до MySQL 5.7. (Если вы решите обновить источник, имейте в виду, что такая инструкция CREATE
TABLE ... SELECT завершится ошибкой после обновления, если её не переписать, чтобы исключить побочные эффекты на другие таблицы.)
Эти особенности не зависят от версии MySQL:
CREATE TABLE ... SELECTвсегда выполняет неявную фиксацию (Раздел 13.3.3, «Инструкции, вызывающие неявную фиксацию»).-
Если целевая таблица не существует, регистрация происходит следующим образом. Не имеет значения, присутствует ли
IF NOT EXISTS.В формате
STATEMENTилиMIXED: Инструкция регистрируется как записанная.В формате
ROW: Инструкция регистрируется как инструкцияCREATE TABLE, за которой следует ряд событий вставки строк.
Если инструкция завершается ошибкой, ничего не регистрируется. Это включает случай, когда целевая таблица существует, а
IF NOT EXISTSне указано.
Когда целевая таблица существует и IF NOT
EXISTS указано, MySQL 5.7 полностью игнорирует инструкцию; ничего не вставляется и не регистрируется.
© 2025 Oracle
Licensed under the GPLv2 License.