MySQL applies these rules when
CREATE
TABLE ... SELECT statements are replicated:
CREATE TABLE ... SELECTalways performs an implicit commit (Section 15.3.3, “Statements That Cause an Implicit Commit”).If the destination table does not exist, logging occurs as follows. It does not matter whether
IF NOT EXISTSis present.STATEMENTorMIXEDformat: The statement is logged as written.ROWformat: The statement is logged as aCREATE TABLEstatement followed by a series of insert-row events.With storage engines that support atomic DDL, the statement is logged as one transaction. For more information, see Section 15.1.1, “Atomic Data Definition Statement Support”.
If the
CREATE TABLE ... SELECTstatement fails, nothing is logged. This includes the case that the destination table exists andIF NOT EXISTSis not given.If the destination table exists and
IF NOT EXISTSis given, MySQL 9.4 ignores the statement completely; nothing is inserted or logged.
MySQL 9.4 does not allow a
CREATE
TABLE ... SELECT statement to make any changes in
tables other than the table that is created by the statement.