本节讨论 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 版本:
如果目标表不存在,则记录如下。
IF NOT EXISTS
是否存在 并不重要。STATEMENT
或MIXED
格式:语句按书面记录。ROW
格式:该语句被记录为一个CREATE TABLE
语句,后跟一系列插入行事件。
如果语句失败,则不会记录任何内容。这包括目标表存在
IF NOT EXISTS
但未给出的情况。
当目标表存在并IF NOT
EXISTS
给出时,MySQL 5.7 完全忽略该语句;没有插入或记录任何内容。