オンラインDDL
DDLの一部はテーブルの全ての行のコピーを必要としたり、DDL実行中のロックを必要とする ただしDDL実行中も他トランザクションによる読み書きを許容するものがあり、オンラインDDLと呼ばれる ALTER 文に明示的に ALGORITHM=INPLACE, LOCK=NONE を付けて実行できるかどうかで判断できる
オンラインDDL非対応の場合は即座にエラーになる
code:sql
ALTER TABLE users ADD COLUMN foo VARCHAR(36) DEFAULT NULL AFTER bar, ALGORITHM=INPLACE, LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
内部的な挙動は以下の流れ
共有ロックの間は別トランザクションから読み書きが可能