MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  CREATE TABLE ... SELECT ステートメントのレプリケーション

17.5.1.7 CREATE TABLE ... SELECT ステートメントのレプリケーション

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 ステートメントで、ステートメントによって作成されたテーブル以外のテーブルを変更することはできません。


関連キーワード:  ステートメント, ソース, テーブル, TABLE, ベース, トランザクション, CREATE, バイナリ, GTID, ログ