1091: Can't DROP 'x'; check that column/key exists
MySQL의미
ALTER TABLE로 삭제하려는 컬럼, 인덱스 또는 외래 키가 존재하지 않는다. 존재하지 않는 객체는 삭제할 수 없다.
원인
DROP COLUMN/INDEX/FOREIGN KEY에 존재하지 않는 객체 이름 지정. 이름 오타. 객체가 이미 삭제됨. 외래 키 이름과 인덱스 이름 혼동. 마이그레이션 두 번째 실행.
해결 방법
객체의 실제 이름을 확인한다: SHOW CREATE TABLE my_table; 또는 SHOW INDEX FROM my_table; 올바른 이름으로 삭제한다. 외래 키는 symbol 이름을 사용한다: 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
- 1305PROCEDURE does not exist
- 1227Access denied; you need (at least one of) the PRIVILEGE
- 3730Cannot drop table referenced by a foreign key constraint