1091: Can't DROP 'x'; check that column/key exists(DROP できない。列/キーの存在を確認)
MySQL意味
ALTER TABLE で削除しようとした列、インデックス、または外部キーが存在しない。存在しないオブジェクトは削除できない。
原因
DROP COLUMN/INDEX/FOREIGN KEY で存在しないオブジェクト名を指定した、名前のつづりの誤り、オブジェクトがすでに削除済み、外部キー名とインデックス名の混同、マイグレーションの 2 回目の実行。
対処方法
オブジェクトの実際の名前を確認する: SHOW CREATE TABLE my_table; または SHOW INDEX FROM my_table; 正しい名前で削除する。外部キーにはそのシンボル名を使う: ALTER TABLE my_table DROP FOREIGN KEY fk_name; MySQL には DROP COLUMN IF EXISTS 構文はない (MariaDB のみ)。冪等なマイグレーションでは、先に information_schema.columns で列の存在を確認する: SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'my_table' AND column_name = 'my_column';
同じデータベースの他の項目
- 1071Specified key was too long; max key length is 767 bytes(キーが長すぎる)
- 1050Table already exists(テーブルがすでに存在する)
- 1051Unknown table 'x'(不明なテーブル)
- 1093You can't specify target table 'x' for update in FROM clause(FROM 句で更新対象テーブルは指定できない)
- 1305PROCEDURE does not exist(プロシージャが存在しない)
- 1227Access denied; you need (at least one of) the PRIVILEGE(アクセス拒否。権限が必要)
- 3730Cannot drop table referenced by a foreign key constraint(外部キー制約で参照されているテーブルは削除できない)