簡単な答え:MySQLの場合<5.6ロックが必要です。 5.6以降、InnoDBを使用して、ロック多くのALTER TABLE
には必要ありません 列の追加を含む操作
。
MySQL 5.5以前を使用している場合は、操作全体で読み取りロックが取得され、最後に短い書き込みロックが取得されます。
つまり、列を追加すると、読み取りはほとんどの操作でテーブルをロックし、最後に書き込みロックを取得します。
MySQL 5.6は、オンラインDDL を追加しました テーブルやインデックスの変更など、多くのことを高速化および改善するInnoDBに。テーブルに列を追加すると、テーブルロックが不要になります操作の開始時と終了時の短い排他ロックを除く 。
すべき 自動的に発生しますが、必ずALGORITHM=inplace
を設定してください およびLOCK=none
ALTER TABLE
に ステートメント。
例外が1つあります...