Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  DDL ステートメントの結合または分離

14.11.4 DDL ステートメントの結合または分離

オンライン DDL が導入される前は、多くの DDL 操作を 1 つの ALTER TABLE ステートメントに結合することが一般的な習慣でした。各 ALTER TABLE ステートメントにはテーブルのコピーと再構築が含まれていたため、テーブルに対するすべての変更を 1 回の再構築操作で実行できたことから、同じテーブルへのいくつかの変更を一度に行う方が効率的でした。マイナス面としては、DDL 操作に関連する SQL コードが保守しにくく、別のスクリプトでの再利用も難しい点がありました。特定の変更が毎回異なっていたとすると、少し異なるシナリオごとに、新しい複雑な ALTER TABLE の構築が必要になる可能性があります。

インプレースで実行できる DDL 操作の場合は、表14.5「DDL 操作のオンラインステータスのサマリー」に示すように、効率を犠牲にすることなく、スクリプト作成や保守を容易にするために DDL 操作を個々の ALTER TABLE ステートメントに分離できるようになりました。たとえば、次のような複雑なステートメントを取り上げ、

alter table t1 add index i1(c1), add unique index i2(c2), change c4_old_name c4_new_name integer unsigned;

それを独立してテストおよび実行できる、次のようなより簡単な部分に分解することができます。

alter table t1 add index i1(c1);
alter table t1 add unique index i2(c2);
alter table t1 change c4_old_name c4_new_name integer unsigned not null;

複数の部分からなる ALTER TABLE ステートメントは、次の目的に引き続き使用できます。

  • 特定のシーケンスで実行する必要のある操作。たとえば、インデックスの作成に続けて、そのインデックスを使用する外部キー制約を作成する場合など。

  • グループとして成功または失敗するようにしたい、すべてが同じ特定の LOCK 句を使用している操作。

  • インプレースで実行できない、つまり、引き続きテーブルをコピーして再構築する操作。

  • 特殊なシナリオでの正確な下位互換性のために必要な場合に強制的にテーブルコピー動作を行うために、ALGORITHM=COPY または old_alter_table=1 を指定する操作。