Documentation Home
MySQL 8.0 参考手册  / 第十七章复制  / 17.5 复制注意事项和技巧  / 17.5.1 复制特性和问题  /  16.4.1.6 CREATE TABLE ... SELECT 语句的复制

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是否存在 并不重要。

    • STATEMENTMIXED 格式:语句按书面记录。

    • ROW格式:该语句被记录为一个CREATE TABLE 语句,后跟一系列插入行事件。

  • 如果语句失败,则不会记录任何内容。这包括目标表存在IF NOT EXISTS但未给出的情况。

当目标表存在并IF NOT EXISTS给出时,MySQL 5.7 完全忽略该语句;没有插入或记录任何内容。