MySQL では、CREATE TABLE ... SELECT
ステートメントのレプリケート時に次のルールが適用されます:
CREATE TABLE ... SELECT
は常に暗黙的コミットを実行します (セクション13.3.3「暗黙的なコミットを発生させるステートメント」)。-
宛先テーブルが存在しない場合、ロギングは次のように行われます。
IF NOT EXISTS
が存在するかどうかは重要ではありません。STATEMENT
またはMIXED
形式: ステートメントは、書き込まれたものとしてログに記録されます。-
ROW
形式: ステートメントは、CREATE TABLE
ステートメントおよび一連の行挿入イベントとしてログに記録されます。MySQL 8.0.21 より前は、ステートメントは 2 つのトランザクションとしてログに記録されます。 MySQL 8.0.21 の時点では、アトミック DDL をサポートするストレージエンジンでは、1 つのトランザクションとしてログに記録されます。 詳細は、セクション13.1.1「アトミックデータ定義ステートメントのサポート」を参照してください。
CREATE TABLE ... SELECT
ステートメントが失敗した場合、何も記録されません。 これには、宛先テーブルが存在し、IF NOT EXISTS
が指定されていないケースが含まれます。宛先テーブルが存在し、
IF NOT EXISTS
が指定されている場合、MySQL 8.0 はステートメントを完全に無視します。何も挿入または記録されません。
MySQL 8.0 では、CREATE TABLE ... SELECT
ステートメントで、ステートメントによって作成されたテーブル以外のテーブルを変更することはできません。