MySQL中如何删除带外键约束的列(未知约束名场景)
解决步骤
- 先查询自动生成的外键约束名,执行以下SQL语句即可查到
staff表上关联sajilo_user表uid字段的外键约束名:
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'staff' AND REFERENCED_TABLE_NAME = 'sajilo_user' AND COLUMN_NAME = 'uid';
查询结果一般是类似staff_ibfk_1这类自动生成的名称。
- 先删除外键约束,再删除对应列即可,替换下面语句中的
<约束名>为上一步查到的结果:
-- 删除外键约束 ALTER TABLE staff DROP FOREIGN KEY <约束名>; -- 再删除uid列,此时不会再报错 ALTER TABLE staff DROP COLUMN uid;
优化方案(无需删除列,避免丢失已有数据)
如果你不需要清空uid列的已有数据,完全可以不用删列,只需要删除旧外键后直接添加带ON DELETE CASCADE的新外键即可:
-- 先删除旧外键 ALTER TABLE staff DROP FOREIGN KEY <约束名>; -- 直接新增带级联删除的外键约束,建议显式指定约束名方便后续维护 ALTER TABLE staff ADD CONSTRAINT fk_staff_sajilo_user FOREIGN KEY (uid) REFERENCES sajilo_user(uid) ON DELETE CASCADE;
如果要处理bid字段的外键级联删除,操作逻辑完全一致,只需要把第一步查询语句里的REFERENCED_TABLE_NAME改成branch,COLUMN_NAME改成bid即可。
内容的提问来源于stack exchange,提问作者AcKuber
相关产品推荐
相关产品推荐

