1091: Can't DROP 'x'; check that column/key exists(无法 DROP 'x';请检查该列/键是否存在)
MySQL含义
要用 ALTER TABLE 删除的列、索引或外键不存在。无法删除不存在的对象。
原因
在 DROP COLUMN/INDEX/FOREIGN KEY 中给出了不存在的对象名;名称拼写错误;对象已被删除;将外键名与索引名混淆;迁移第二次运行。
解决方法
核实对象的真实名称: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(指定的键过长;最大键长度为 767 字节)
- 1050Table already exists(表已存在)
- 1051Unknown table 'x'(未知表 'x')
- 1093You can't specify target table 'x' for update in FROM clause(不能在 FROM 子句中指定要更新的目标表 'x')
- 1305PROCEDURE does not exist(PROCEDURE 不存在)
- 1227Access denied; you need (at least one of) the PRIVILEGE(访问被拒绝;需要(至少一项)PRIVILEGE 权限)
- 3730Cannot drop table referenced by a foreign key constraint(无法删除被外键约束引用的表)