一、说明
1、MySQL建表时,有外键依赖时一般通过业务区分,不在表上创建外键依赖(如果要删除表或者通过删除再新增的方式调整表结构,就GG了)
2、若某些小可爱创建了外键依赖,你却需要删除他的话,可以参考以下解决方案
二、解决方案
1、查询哪些表加了外键依赖
SELECT C.TABLE_SCHEMA 拥有者,
C.REFERENCED_TABLE_NAME 父表名称 ,
C.REFERENCED_COLUMN_NAME 父表字段 ,
C.TABLE_NAME 子表名称,
C.COLUMN_NAME 子表字段,
C.CONSTRAINT_NAME 约束名,
T.TABLE_COMMENT 表注释,
R.UPDATE_RULE 约束更新规则,
R.DELETE_RULE 约束删除规则
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE C
JOIN INFORMATION_SCHEMA. TABLES T
ON T.TABLE_NAME = C.TABLE_NAME
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R
ON R.TABLE_NAME = C.TABLE_NAME
AND R.CONSTRAINT_NAME = C.CONSTRAINT_NAME
AND R.REFERENCED_TABLE_NAME = C.REFERENCED_TABLE_NAME
WHERE C.REFERENCED_TABLE_NAME IS NOT NULL
and C.TABLE_SCHEMA = '数据库名'
and C.REFERENCED_TABLE_NAME = '被依赖的表名'
2、删除外键
ALTER TABLE ${表名} DROP FOREIGN KEY ${外键名};
1)逐个删除吧,外键名可能不一样
2)如果多的话,建议用java写个main方法生成sql