ALTER TABLE
を使用して文字セットまたは文字カラムの照合順序を変更するときに、重複キーエラーを受け取った場合、原因は新しいカラムの照合順序が同じ値に対して 2 つのキーをマップしたか、テーブルが破損していることです。後者の場合は、そのテーブルに対して REPAIR TABLE
を実行してください。
ALTER TABLE
が次のエラーで停止した場合、問題は ALTER TABLE
の初期の処理中に MySQL がクラッシュしたことである可能性があり、A-
または xxx
B-
という名前の古いテーブルが残っていることがあります。
xxx
Error on rename of './database/name.frm'
to './database/B-xxx.frm' (Errcode: 17)
この場合は、MySQL のデータディレクトリに移動して、A-
または B-
で始まる名前を持つすべてのファイルを削除します。(それらのファイルを削除せずに、別の場所に移動することもできます。)
ALTER TABLE
は次のように動作します。
要求された構造の変更を適用した
A-
という名前の新しいテーブルを作成します。xxx
元のテーブルから
A-
にすべての行をコピーします。xxx
元のテーブルの名前を
B-
に変更します。xxx
A-
を元のテーブル名に変更します。xxx
B-
を削除します。xxx
名前変更の操作に問題があった場合、MySQL は変更を取り消そうとします。重大な問題がある場合 (発生することはないはずですが)、MySQL は古いテーブルを B-
として残すことがあります。システムレベルでテーブルファイルを単純に名前変更することによって、データは元に戻ります。
xxx
トランザクションテーブルに対して ALTER TABLE
を使用したとき、または Windows を使用しているときに、LOCK TABLE
が発行されていた場合、ALTER TABLE
はテーブルをロック解除します。これが行われるのは、InnoDB
およびこれらのオペレーティングシステムは使用されているテーブルをドロップできないためです。