Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел обсуждает, как MySQL тиражируется CREATE TABLE ... SELECT
операторы.
MySQL 5.6 не позволяет a CREATE TABLE
... SELECT
оператор, чтобы произвести любые изменения в таблицах кроме таблицы, которая составляется
оператором. Это - изменение в поведении от предыдущих версий MySQL, который разрешал этим операторам делать так.
Это означает что, при использовании основанной на операторе репликации между MySQL 5.6 или более поздним ведомым
устройством и ведущим устройством, выполняющим предыдущую версию MySQL, a CREATE TABLE ... SELECT
порождение оператора изменяется в других таблицах на
основных сбоях на ведомом устройстве, заставляя репликацию остановиться. Чтобы препятствовать этому происходить,
следует использовать построчную репликацию, переписать незаконный оператор прежде, чем выполнить это на ведущем
устройстве, или обновить ведущее устройство до MySQL 5.6 (или позже). (Если Вы хотите обновлять ведущее
устройство, имейте в виду что такой CREATE
TABLE ... SELECT
оператор перестанет работать после обновления, если это не будет переписано,
чтобы удалить любые побочные эффекты на других таблицах.) Это не проблема при использовании построчной
репликации, потому что оператор регистрируется как a CREATE TABLE
оператор с любыми изменениями, чтобы представить в виде таблицы
данные, регистрируемые, как вставляют строка события, а не как все CREATE TABLE ... SELECT
.
Эти поведения не зависят от версии MySQL:
CREATE
TABLE ... SELECT
всегда выполняет неявную фиксацию (Раздел
13.3.3, "Операторы Который Причина Неявная Фиксация").
Если целевая таблица не существует, журналирование происходит следующим образом.
Это не имеет значения ли IF NOT EXISTS
присутствует.
STATEMENT
или MIXED
формат: оператор регистрируется как записано.
ROW
формат: оператор регистрируется как a
CREATE TABLE
оператор следовал серией событий вставлять-строки.
Если оператор перестал работать, ничто не регистрируется. Это включает случай, что
целевая таблица существует и IF NOT EXISTS
не дается.
Когда целевая таблица существует и IF NOT EXISTS
дается, MySQL обрабатывает
оператор зависимым от версии способом.
В MySQL 5.1 прежде 5.1.51 и в MySQL 5.5 прежде 5.5.6 (это - исходное поведение):
STATEMENT
или MIXED
формат: оператор регистрируется как записано.
ROW
формат: оператор регистрируется как a CREATE TABLE
оператор следовал серией событий вставлять-строки.
В MySQL 5.1 с 5.1.51:
STATEMENT
или MIXED
формат: оператор регистрируется как эквивалентная пара CREATE TABLE
и INSERT INTO ... SELECT
операторы.
ROW
формат: оператор регистрируется как a CREATE TABLE
оператор следовал серией событий вставлять-строки.
В MySQL 5.5 с 5.5.6:
Ничто не вставляется или регистрируется.
Эти зависимости от версии возникают из-за изменения в MySQL 5.5.6 в обработке CREATE TABLE ... SELECT
не вставить строки, если целевая таблица уже существует,
и изменение, произведенное в MySQL 5.1.51, чтобы сохранить прямую совместимость в репликации таких операторов от
5.1 ведущих устройств к 5.5 ведомым устройствам. Для получения дополнительной информации см. Раздел
13.1.17.1,"CREATE TABLE ... SELECT
Синтаксис".