このページは機械翻訳したものです。
DDL 操作のオンラインサポートの詳細、構文例および使用上のノートは、このセクションの次のトピックで説明します。
次のテーブルに、インデックス操作のオンライン DDL サポートの概要を示します。 アスタリスクは、追加情報、例外または依存関係を示します。 詳細は、構文および使用上のノートを参照してください。
表 15.16 インデックス操作のオンライン DDL サポート
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ | 
|---|---|---|---|---|---|
| セカンダリインデックスの作成または追加 | いいえ | はい | いいえ | はい | いいえ | 
| インデックスの削除 | いいえ | はい | いいえ | はい | はい | 
| インデックスの名前変更 | いいえ | はい | いいえ | はい | はい | 
FULLTEXT インデックスの追加 | 
            いいえ | はい* | いいえ* | いいえ | いいえ | 
SPATIAL インデックスの追加 | 
            いいえ | はい | いいえ | いいえ | いいえ | 
| インデックスタイプの変更 | はい | はい | いいえ | はい | はい | 
構文および使用上のノート
- 
セカンダリインデックスの作成または追加
CREATE INDEX name ON table (col_list);ALTER TABLE tbl_name ADD INDEX name (col_list);このテーブルは、インデックスの作成中も読取りおよび書込み操作に使用できます。
CREATE INDEXステートメントは、テーブルにアクセスしているすべてのトランザクションが完了した後にのみ終了するため、インデックスの初期状態にはテーブルの最新の内容が反映されます。セカンダリインデックスを追加するためのオンライン DDL サポートとは、通常、セカンダリインデックスのないテーブルを作成してからデータのロード後にセカンダリインデックスを追加することで、テーブルおよび関連するインデックスの作成およびロードのプロセス全体を高速化できることを意味します。
新しく作成されたセカンダリインデックスには、
CREATE INDEXまたはALTER TABLEステートメントの実行が終了した時点でテーブルにコミットされたデータのみが含まれます。 コミットされていない値や古いバージョンの値、または削除対象としてマークされているが、まだ古いインデックスから削除されていない値は含まれていません。この操作のパフォーマンス、領域使用量およびセマンティクスに影響する要因もあります。 詳細は、セクション15.12.6「オンライン DDL の制限事項」を参照してください。
 - 
インデックスの削除
DROP INDEX name ON table;ALTER TABLE tbl_name DROP INDEX name;このテーブルは、インデックスの削除中も読取りおよび書込み操作に使用できます。
DROP INDEXステートメントは、テーブルにアクセスしているすべてのトランザクションが完了した後にのみ終了するため、インデックスの初期状態にはテーブルの最新の内容が反映されます。 - 
インデックスの名前変更
ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name, ALGORITHM=INPLACE, LOCK=NONE; - 
FULLTEXTインデックスの追加CREATE FULLTEXT INDEX name ON table(column);ユーザー定義の
FTS_DOC_IDカラムがない場合は、最初のFULLTEXTインデックスを追加するとテーブルが再構築されます。 テーブルを再構築せずに、FULLTEXTインデックスを追加できます。 - 
SPATIALインデックスの追加CREATE TABLE geom (g GEOMETRY NOT NULL); ALTER TABLE geom ADD SPATIAL INDEX(g), ALGORITHM=INPLACE, LOCK=SHARED; - 
インデックスタイプの変更 (
USING {BTREE | HASH})ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE, ALGORITHM=INSTANT; 
次のテーブルに、主キー操作のオンライン DDL サポートの概要を示します。 アスタリスクは、追加情報、例外または依存関係を示します。 構文および使用上のノートを参照してください。
表 15.17 主キー操作のオンライン DDL サポート
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ | 
|---|---|---|---|---|---|
| 主キーの追加 | いいえ | はい* | はい* | はい | いいえ | 
| 主キーの削除 | いいえ | いいえ | はい | いいえ | いいえ | 
| 主キーの削除および別の主キーの追加 | いいえ | はい | はい | はい | いいえ | 
構文および使用上のノート
- 
主キーの追加
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;テーブルを適切に再構築します。 データは大幅に再編成され、コストのかかる操作になります。 カラムを
NOT NULLに変換する必要がある場合、特定の条件下でALGORITHM=INPLACEは許可されません。clustered index を再構築するには、常にテーブルデータのコピーが必要です。 したがって、後で
ALTER TABLE ... ADD PRIMARY KEYを発行するのではなく、テーブルの作成時に primary key を定義することをお薦めします。UNIQUEまたはPRIMARY KEYインデックスを作成したとき、MySQL は、いくつかの追加の作業を行う必要があります。UNIQUEインデックスの場合、MySQL は、テーブルに重複したキーの値が含まれていないことをチェックします。PRIMARY KEYインデックスの場合も、MySQL は、どのPRIMARY KEYカラムにもNULLが含まれていないことをチェックします。ALGORITHM=COPY句を使用して主キーを追加すると、MySQL は関連付けられたカラムのNULL値をデフォルト値に変換: 数値の場合は 0、文字ベースのカラムおよび BLOB の場合は空の文字列、DATETIMEの場合は 0000-00-00 00:00:00。 これは非標準の動作であるため、これに依存しないようにすることをお勧めします。ALGORITHM=INPLACEを使用した主キーの追加は、SQL_MODE設定にstrict_trans_tablesまたはstrict_all_tablesフラグが含まれている場合にのみ許可されます。SQL_MODE設定が厳密な場合、ALGORITHM=INPLACEは許可されますが、リクエストされた主キーカラムにNULL値が含まれている場合、ステートメントは失敗する可能性があります。ALGORITHM=INPLACEの動作は、より標準に準拠しています。主キーなしでテーブルを作成すると、
InnoDBによってテーブルが選択されます。これは、NOT NULLカラムに定義されている最初のUNIQUEキーまたはシステム生成キーです。 余分な非表示カラムの不確実性および潜在的な領域要件を回避するには、CREATE TABLEステートメントの一部としてPRIMARY KEY句を指定します。MySQL では、既存のデータを元のテーブルから目的のインデックス構造を持つ一時テーブルにコピーすることで、新しいクラスタインデックスが作成されます。 データが一時テーブルに完全にコピーされると、元のテーブルの名前は別の一時テーブル名に変更されます。 新しいクラスタ化されたインデックスで構成される一時テーブルの名前が元のテーブルの名前に変更され、元のテーブルはデータベースから削除されます。
セカンダリインデックスでの操作に適用されるオンラインパフォーマンスの拡張は、主キーインデックスには適用されません。 InnoDB テーブルの行は、主キーに基づいて編成されたクラスタ化されたインデックスに格納されます。これにより、一部のデータベースシステムで「インデックス編成テーブル」と呼ばれるものが形成されます。 テーブル構造は主キーに密接に関連付けられているため、主キーを再定義するには引き続きデータをコピーする必要があります。
主キーに対する操作で
ALGORITHM=INPLACEが使用される場合は、データが引き続きコピーされるにもかかわらず、次の理由でALGORITHM=COPYを使用するより効率的です。ALGORITHM=INPLACEには、Undo ロギングやそれに関連する Redo ロギングが必要ありません。 これらの操作は、ALGORITHM=COPYを使用する DDL ステートメントのオーバーヘッドを増やします。セカンダリインデックスエントリは事前にソートされているため、順番にロードできます。
セカンダリインデックスへのランダムアクセス挿入は存在しないため、変更バッファーは使用されません。
 - 
主キーの削除
ALTER TABLE tbl_name DROP PRIMARY KEY, ALGORITHM=COPY;同じ
ALTER TABLEステートメントに新しい主キーを追加せずに主キーを削除できるのは、ALGORITHM=COPYのみです。 - 
主キーの削除および別の主キーの追加
ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;データは大幅に再編成され、コストのかかる操作になります。
 
次のテーブルに、カラム操作のオンライン DDL サポートの概要を示します。 アスタリスクは、追加情報、例外または依存関係を示します。 詳細は、構文および使用上のノートを参照してください。
表 15.18 カラム操作のオンライン DDL サポート
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ | 
|---|---|---|---|---|---|
| カラムの追加 | はい* | はい | いいえ* | はい* | いいえ | 
| カラムの削除 | いいえ | はい | はい | はい | いいえ | 
| カラム名の変更 | いいえ | はい | いいえ | はい* | はい | 
| カラムの並替え | いいえ | はい | はい | はい | いいえ | 
| カラムのデフォルト値の設定 | はい | はい | いいえ | はい | はい | 
| カラムのデータ型の変更 | いいえ | いいえ | はい | いいえ | いいえ | 
VARCHAR カラムサイズの拡張 | 
            いいえ | はい | いいえ | はい | はい | 
| カラムのデフォルト値の削除 | はい | はい | いいえ | はい | はい | 
| 自動インクリメント値の変更 | いいえ | はい | いいえ | はい | いいえ* | 
カラムの NULL 化 | 
            いいえ | はい | はい* | はい | いいえ | 
カラムの NOT NULL 化 | 
            いいえ | はい* | はい* | はい | いいえ | 
ENUM または SET カラムの定義の変更 | 
            はい | はい | いいえ | はい | はい | 
構文および使用上のノート
- 
カラムの追加
ALTER TABLE tbl_name ADD COLUMN column_name column_definition, ALGORITHM=INSTANT;INSTANTアルゴリズムを使用してカラムを追加する場合は、次の制限が適用されます:カラムの追加は、
ALGORITHM=INSTANTをサポートしない他のALTER TABLEアクションと同じステートメントで組み合せることはできません。カラムは、テーブルの最後のカラムとしてのみ追加できます。 他のカラム間の他の位置へのカラムの追加はサポートされていません。
ROW_FORMAT=COMPRESSEDを使用するテーブルにはカラムを追加できません。FULLTEXTインデックスを含むテーブルにはカラムを追加できません。カラムは一時テーブルに追加できません。 一時テーブルでは、
ALGORITHM=COPYのみがサポートされます。データディクショナリテーブルスペースに存在するテーブルにはカラムを追加できません。
行サイズ制限は、カラムの追加時には評価されません。 ただし、行サイズ制限は、テーブルの行を挿入および更新する DML 操作中にチェックされます。
同じ
ALTER TABLEステートメントに複数のカラムを追加できます。 例:ALTER TABLE t1 ADD COLUMN c2 INT, ADD COLUMN c3 INT, ALGORITHM=INSTANT;INFORMATION_SCHEMA.INNODB_TABLESおよびINFORMATION_SCHEMA.INNODB_COLUMNSは、即時に追加されたカラムのメタデータを提供します。INFORMATION_SCHEMA.INNODB_TABLES.INSTANT_COLSでは、最初のインスタントカラムを追加する前に、テーブルのカラム数が表示されます。INFORMATION_SCHEMA.INNODB_COLUMNS.HAS_DEFAULTおよびDEFAULT_VALUEは、即時に追加されたカラムのデフォルト値に関するメタデータを提供します。auto-increment カラムを追加する場合、同時 DML は許可されません。 データは大幅に再編成され、コストのかかる操作になります。 少なくとも、
ALGORITHM=INPLACE, LOCK=SHAREDが必要です。ALGORITHM=INPLACEを使用してカラムを追加すると、テーブルが再構築されます。 - 
カラムの削除
ALTER TABLE tbl_name DROP COLUMN column_name, ALGORITHM=INPLACE, LOCK=NONE;データは大幅に再編成され、コストのかかる操作になります。
 - 
カラム名の変更
ALTER TABLE tbl CHANGE old_col_name new_col_name data_type, ALGORITHM=INPLACE, LOCK=NONE;同時 DML を許可するには、同じデータ型を保持し、カラム名のみを変更します。
同じデータ型と
[NOT] NULL属性を保持し、カラム名の変更のみを行う場合、操作は常にオンラインで実行できます。外部キー制約の一部であるカラムの名前を変更することもできます。 外部キー定義は、新しいカラム名を使用するように自動的に更新されます。 外部キーに参加するカラムの名前の変更は、
ALGORITHM=INPLACEでのみ機能します。ALGORITHM=COPY句を使用した場合、または他のなんらかの状況でコマンドがバックグラウンドでALGORITHM=COPYを使用する場合、ALTER TABLEステートメントは失敗します。ALGORITHM=INPLACEでは、generated column の名前の変更はサポートされていません。 - 
カラムの並替え
カラムの順序を変更するには、
CHANGEまたはMODIFY操作でFIRSTまたはAFTERを使用します。ALTER TABLE tbl_name MODIFY COLUMN col_name column_definition FIRST, ALGORITHM=INPLACE, LOCK=NONE;データは大幅に再編成され、コストのかかる操作になります。
 - 
カラムのデータ型の変更
ALTER TABLE tbl_name CHANGE c1 c1 BIGINT, ALGORITHM=COPY;カラムのデータ型の変更は、
ALGORITHM=COPYでのみサポートされます。 - 
VARCHARカラムサイズの拡張ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255), ALGORITHM=INPLACE, LOCK=NONE;VARCHARカラムに必要な長さバイト数は、同じままにする必要があります。 サイズが 0 から 255 バイトのVARCHARカラムの場合、値のエンコードには長さバイトが必要です。 256 バイト以上のVARCHARカラムの場合は、長さが 2 バイト必要です。 その結果、インプレースALTER TABLEでは、VARCHARカラムサイズの 0 から 255 バイト、または 256 バイトからそれより大きいサイズへの増加のみがサポートされます。 インプレースALTER TABLEでは、VARCHARカラムのサイズを 256 バイト未満から 256 バイト以上に増やすことはサポートされていません。 この場合、必要な長さバイト数は 1 から 2 に変更され、テーブルコピー (ALGORITHM=COPY) でのみサポートされます。 たとえば、シングルバイト文字セットのVARCHARカラムサイズを、インプレースALTER TABLEを使用して VARCHAR(255) から VARCHAR(256) に変更しようとすると、次のエラーが返されます:ALTER TABLE tbl_name ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.注記VARCHARカラムのバイト長は、文字セットのバイト長によって異なります。インプレース
ALTER TABLEを使用したVARCHARサイズの縮小はサポートされていません。VARCHARサイズを小さくするには、テーブルコピー (ALGORITHM=COPY) が必要です。 - 
カラムのデフォルト値の設定
ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULT literal, ALGORITHM=INSTANT;テーブルメタデータのみを変更します。 デフォルトのカラム値は data dictionary に格納されます。
 - 
カラムのデフォルト値の削除
ALTER TABLE tbl ALTER COLUMN col DROP DEFAULT, ALGORITHM=INSTANT; - 
自動インクリメント値の変更
ALTER TABLE table AUTO_INCREMENT=next_value, ALGORITHM=INPLACE, LOCK=NONE;データファイルではなく、メモリーに格納された値を変更します。
レプリケーションまたはシャーディングを使用する分散システムでは、テーブルの自動増分カウンタを特定の値にリセットすることがあります。 テーブルに挿入された次の行は、その自動インクリメントカラムの指定された値を使用します。 この方法は、すべてのテーブルを定期的に空にしてリロードし、自動増分順序を 1 から再開するデータウェアハウス環境でも使用できます。
 - 
カラムの
NULL化ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NULL, ALGORITHM=INPLACE, LOCK=NONE;テーブルを適切に再構築します。 データは大幅に再編成され、コストのかかる操作になります。
 - 
カラムの
NOT NULL化ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL, ALGORITHM=INPLACE, LOCK=NONE;テーブルを適切に再構築します。 操作を成功させるには、
STRICT_ALL_TABLESまたはSTRICT_TRANS_TABLESSQL_MODEが必要です。 カラムに NULL 値が含まれている場合、操作は失敗します。 サーバーは、参照整合性が失われる可能性がある外部キーカラムの変更を禁止します。 セクション13.1.9「ALTER TABLE ステートメント」を参照してください。 データは大幅に再編成され、コストのかかる操作になります。 - 
ENUMまたはSETカラムの定義の変更CREATE TABLE t1 (c1 ENUM('a', 'b', 'c')); ALTER TABLE t1 MODIFY COLUMN c1 ENUM('a', 'b', 'c', 'd'), ALGORITHM=INSTANT;新しい列挙を追加するか、有効なメンバー値のリストの end にメンバーを設定して、
ENUMまたはSETカラムの定義を変更すると、データ型の記憶域サイズが変更されないかぎり、すぐに実行することも、その場で実行することもできます。 たとえば、8 つのメンバーを持つSETカラムにメンバーを追加すると、値ごとに必要な記憶域が 1 バイトから 2 バイトに変更されます。これにはテーブルのコピーが必要です。 リストの途中にメンバーを追加すると、既存のメンバーの番号が変更されます。これには、テーブルコピーが必要になります。 
次のテーブルに、生成されるカラム操作のオンライン DDL サポートの概要を示します。 詳細は、構文および使用上のノートを参照してください。
表 15.19 生成されたカラム操作のオンライン DDL サポート
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ | 
|---|---|---|---|---|---|
STORED カラムの追加 | 
            いいえ | いいえ | はい | いいえ | いいえ | 
STORED カラムの順序の変更 | 
            いいえ | いいえ | はい | いいえ | いいえ | 
STORED カラムの削除 | 
            いいえ | はい | はい | はい | いいえ | 
VIRTUAL カラムの追加 | 
            はい | はい | いいえ | はい | はい | 
VIRTUAL カラムの順序の変更 | 
            いいえ | いいえ | はい | いいえ | いいえ | 
VIRTUAL カラムの削除 | 
            はい | はい | いいえ | はい | はい | 
構文および使用上のノート
- 
STOREDカラムの追加ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED), ALGORITHM=COPY;式はサーバーによって評価される必要があるため、
ADD COLUMNはストアドカラムのインプレース操作ではありません (一時テーブルを使用せずに実行されます)。 - 
STOREDカラムの順序の変更ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST, ALGORITHM=COPY;テーブルを適切に再構築します。
 - 
STOREDカラムの削除ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE;テーブルを適切に再構築します。
 - 
VIRTUALカラムの追加ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL), ALGORITHM=INSTANT;仮想カラムの追加は、即時に実行することも、パーティション化されていないテーブルに対して適切に実行することもできます。
VIRTUALの追加は、パーティションテーブルのインプレース操作ではありません。 - 
VIRTUALカラムの順序の変更ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST, ALGORITHM=COPY; - 
VIRTUALカラムの削除ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INSTANT;VIRTUALカラムの削除は、即時に実行することも、パーティション化されていないテーブルに対して適切に実行することもできます。 
次のテーブルに、外部キー操作のオンライン DDL サポートの概要を示します。 アスタリスクは、追加情報、例外または依存関係を示します。 詳細は、構文および使用上のノートを参照してください。
表 15.20 外部キー操作のオンライン DDL サポート
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ | 
|---|---|---|---|---|---|
| 外部キー制約の追加 | いいえ | はい* | いいえ | はい | はい | 
| 外部キー制約の削除 | いいえ | はい | いいえ | はい | はい | 
構文および使用上のノート
- 
外部キー制約の追加
INPLACEアルゴリズムは、foreign_key_checksが無効な場合にサポートされます。 それ以外の場合は、COPYアルゴリズムのみがサポートされます。ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1) REFERENCES tbl2(col2) referential_actions; - 
外部キー制約の削除
ALTER TABLE tbl DROP FOREIGN KEY fk_name;外部キーの削除は、
foreign_key_checksオプションが有効または無効になった状態でオンラインで実行できます。特定のテーブル上の外部キー制約の名前がわからない場合は、次のステートメントを発行し、各外部キーに対する
CONSTRAINT句で制約名を見つけます。SHOW CREATE TABLE table\Gまたは、
INFORMATION_SCHEMA.TABLE_CONSTRAINTSテーブルをクエリーして、CONSTRAINT_NAMEカラムおよびCONSTRAINT_TYPEカラムを使用して外部キー名を識別します。単一のステートメントで外部キーとそれに関連付けられたインデックスを削除することもできます:
ALTER TABLE table DROP FOREIGN KEY constraint, DROP INDEX index; 
          変更対象のテーブルに foreign keys がすでに存在する場合 (つまり、FOREIGN KEY ... REFERENCE 句を含む child table である場合)、外部キーカラムが直接関係していない場合でも、オンライン DDL 操作に追加の制限が適用されます:
        
親テーブルに対する変更によって、
CASCADEまたはSET NULLパラメータを使用したON UPDATEまたはON DELETE句を介して子テーブルの関連する変更が発生した場合、子テーブルのALTER TABLEは別のトランザクションがコミットされるのを待機できます。同様に、テーブルが外部キー関係の parent table である場合、
FOREIGN KEY句が含まれていなくても、INSERT、UPDATEまたはDELETEステートメントによって子テーブルのON UPDATEまたはON DELETEアクションが完了するまでALTER TABLEを待機できます。
次のテーブルに、テーブル操作のオンライン DDL サポートの概要を示します。 アスタリスクは、追加情報、例外または依存関係を示します。 詳細は、構文および使用上のノートを参照してください。
表 15.21 テーブル操作のオンライン DDL サポート
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ | 
|---|---|---|---|---|---|
ROW_FORMAT の変更 | 
            いいえ | はい | はい | はい | いいえ | 
KEY_BLOCK_SIZE の変更 | 
            いいえ | はい | はい | はい | いいえ | 
| 永続テーブルの統計の設定 | いいえ | はい | いいえ | はい | はい | 
| 文字セットの指定 | いいえ | はい | はい* | いいえ | いいえ | 
| 文字セットの変換 | いいえ | いいえ | はい* | いいえ | いいえ | 
| テーブルの最適化 | いいえ | はい* | はい | はい | いいえ | 
FORCE オプションを使用した再構築 | 
            いいえ | はい* | はい | はい | いいえ | 
| null の再構築の実行 | いいえ | はい* | はい | はい | いいえ | 
| テーブル名の変更 | はい | はい | いいえ | はい | はい | 
構文および使用上のノート
- 
ROW_FORMATの変更ALTER TABLE tbl_name ROW_FORMAT = row_format, ALGORITHM=INPLACE, LOCK=NONE;データは大幅に再編成され、コストのかかる操作になります。
ROW_FORMATオプションの詳細は、テーブルオプション を参照してください。 - 
KEY_BLOCK_SIZEの変更ALTER TABLE tbl_name KEY_BLOCK_SIZE = value, ALGORITHM=INPLACE, LOCK=NONE;データは大幅に再編成され、コストのかかる操作になります。
KEY_BLOCK_SIZEオプションの詳細は、テーブルオプション を参照してください。 - 
永続テーブル統計オプションの設定
ALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20, STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE;テーブルメタデータのみを変更します。
永続統計には、
STATS_PERSISTENT、STATS_AUTO_RECALCおよびSTATS_SAMPLE_PAGESが含まれます。 詳細は、セクション15.8.10.1「永続的オプティマイザ統計のパラメータの構成」を参照してください。 - 
文字セットの指定
ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE;新しい文字エンコーディングが別のものである場合は、テーブルを再構築します。
 - 
文字セットの変換
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY;新しい文字エンコーディングが別のものである場合は、テーブルを再構築します。
 - 
テーブルの最適化
OPTIMIZE TABLE tbl_name;インプレース操作は、
FULLTEXTインデックスのあるテーブルではサポートされていません。 この操作ではINPLACEアルゴリズムを使用しますが、ALGORITHMおよびLOCK構文は許可されていません。 - 
FORCEオプションを使用したテーブルの再構築ALTER TABLE tbl_name FORCE, ALGORITHM=INPLACE, LOCK=NONE;MySQL 5.6.17
.ALGORITHM=INPLACEis not supported for tables withFULLTEXTインデックスの時点でALGORITHM=INPLACEを使用します。 - 
「null」再構築の実行
ALTER TABLE tbl_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE;MySQL 5.6.17 の時点では、
ALGORITHM=INPLACEを使用します。ALGORITHM=INPLACEは、FULLTEXTインデックスのあるテーブルではサポートされていません。 - 
テーブル名の変更
ALTER TABLE old_tbl_name RENAME TO new_tbl_name, ALGORITHM=INSTANT;テーブルの名前変更は、即時に実行することも、インプレースで実行することもできます。 MySQL は、コピーを作成せずに、テーブル
tbl_nameに対応するファイルの名前を変更します。 (RENAME TABLEステートメントを使用してテーブルの名前を変更することもできます。 セクション13.1.36「RENAME TABLE ステートメント」を参照してください。) 名前を変更したテーブル専用に付与された権限は、新しい名前に移行されません。 それらは、手動で変更する必要があります。 
次のテーブルに、テーブルスペース操作のオンライン DDL サポートの概要を示します。 詳細は、構文および使用上のノートを参照してください。
表 15.22 テーブルスペース操作のオンライン DDL サポート
| 操作 | インスタント | インプレース | テーブルの再構築 | 同時 DML の許可 | メタデータの変更のみ | 
|---|---|---|---|---|---|
| 一般テーブルスペースの名前の変更 | いいえ | はい | いいえ | はい | はい | 
| 一般的なテーブルスペース暗号化の有効化または無効化 | いいえ | はい | いいえ | はい | いいえ | 
| file-per-table テーブルスペース暗号化の有効化または無効化 | いいえ | いいえ | はい | いいえ | いいえ | 
構文および使用上のノート
- 
一般テーブルスペースの名前の変更
ALTER TABLESPACE tablespace_name RENAME TO new_tablespace_name;ALTER TABLESPACE ... RENAME TOはINPLACEアルゴリズムを使用しますが、ALGORITHM句はサポートしていません。 - 
一般的なテーブルスペース暗号化の有効化または無効化
ALTER TABLESPACE tablespace_name ENCRYPTION='Y';ALTER TABLESPACE ... ENCRYPTIONはINPLACEアルゴリズムを使用しますが、ALGORITHM句はサポートしていません。関連情報については、セクション15.13「InnoDB 保存データ暗号化」を参照してください。
 - 
file-per-table テーブルスペース暗号化の有効化または無効化
ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY;関連情報については、セクション15.13「InnoDB 保存データ暗号化」を参照してください。
 
        一部の ALTER TABLE パーティション化句を除き、パーティション化された InnoDB テーブルのオンライン DDL 操作は、通常の InnoDB テーブルに適用されるのと同じルールに従います。
      
        一部の ALTER TABLE パーティション化句は、通常の非パーティション InnoDB テーブルと同じ内部オンライン DDL API を経由しません。 その結果、ALTER TABLE パーティション化句のオンラインサポートは異なります。 
      
        次のテーブルに、各 ALTER TABLE パーティション化ステートメントのオンラインステータスを示します。 使用されるオンライン DDL API に関係なく、MySQL は可能な場合はデータのコピーおよびロックを最小限に抑えようとします。 
      
        ALGORITHM=COPY を使用するか、「ALGORITHM=DEFAULT, LOCK=DEFAULT」 のみを許可する ALTER TABLE パーティション化オプションでは、COPY アルゴリズムを使用してテーブルを再パーティション化します。 つまり、新しいパーティション化されたテーブルは、新しいパーティション化スキームで作成されます。 新しく作成されたテーブルには、ALTER TABLE ステートメントによって適用された変更が含まれ、テーブルデータが新しいテーブル構造にコピーされます。 
      
表 15.23 パーティション化操作のオンライン DDL サポート
| Partitioning 句 | インスタント | インプレース | DML を許可 | メモ | 
|---|---|---|---|---|
PARTITION BY | 
            いいえ | いいえ | いいえ | 
ALGORITHM=COPY、LOCK={DEFAULT|SHARED|EXCLUSIVE} を許可 | 
          
ADD PARTITION | 
            いいえ | はい* | はい* | 
ALGORITHM=INPLACE, LOCK={DEFAULT|NONE|SHARED|EXCLUSISVE} は、RANGE および LIST パーティション、HASH および KEY パーティションの ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSISVE} およびすべてのパーティションタイプの ALGORITHM=COPY, LOCK={SHARED|EXCLUSIVE} でサポートされています。 RANGE または LIST によってパーティション化されたテーブルの既存のデータはコピーしません。 MySQL は共有ロックを保持しながらデータをコピーするため、HASH または LIST によってパーティション化されたテーブルに対して ALGORITHM=COPY で同時クエリーが許可されます。  | 
          
DROP PARTITION | 
            いいえ | はい* | はい* | 
 
                 
                  | 
          
DISCARD PARTITION | 
            いいえ | いいえ | いいえ | 
ALGORITHM=DEFAULT、LOCK=DEFAULT のみを許可 | 
          
IMPORT PARTITION | 
            いいえ | いいえ | いいえ | 
ALGORITHM=DEFAULT、LOCK=DEFAULT のみを許可 | 
          
TRUNCATE PARTITION | 
            いいえ | はい | はい | 既存のデータをコピーしません。 行を削除するだけで、テーブル自体またはそのパーティションの定義は変更されません。 | 
COALESCE PARTITION | 
            いいえ | はい* | いいえ | 
ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} がサポートされています。 | 
          
REORGANIZE PARTITION | 
            いいえ | はい* | いいえ | 
ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} がサポートされています。 | 
          
EXCHANGE PARTITION | 
            いいえ | はい | はい | |
ANALYZE PARTITION | 
            いいえ | はい | はい | |
CHECK PARTITION | 
            いいえ | はい | はい | |
OPTIMIZE PARTITION | 
            いいえ | いいえ | いいえ | 
ALGORITHM 句および LOCK 句は無視されます。 テーブル全体を再構築します。 セクション24.3.4「パーティションの保守」を参照してください。  | 
          
REBUILD PARTITION | 
            いいえ | はい* | いいえ | 
ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} がサポートされています。 | 
          
REPAIR PARTITION | 
            いいえ | はい | はい | |
REMOVE PARTITIONING | 
            いいえ | いいえ | いいえ | 
ALGORITHM=COPY、LOCK={DEFAULT|SHARED|EXCLUSIVE} を許可 | 
          
        パーティションテーブルに対する非パーティション化オンライン ALTER TABLE 操作は、通常のテーブルに適用されるのと同じルールに従います。 ただし、ALTER TABLE は各テーブルパーティションに対してオンライン操作を実行するため、複数のパーティションで操作が実行されるため、システムリソースに対する需要が増加します。 
      
        ALTER TABLE パーティション化句の詳細は、パーティショニングオプション および セクション13.1.9.1「ALTER TABLE パーティション操作」 を参照してください。 一般的なパーティション化については、第24章「パーティション化」 を参照してください。