背景:我想在MySql中删除具有外键约束的表。当我这样做时,我得到以下信息:
Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails
如何删除与表相关的外键而使其他人离开。
#1 楼
首先,以这种方式找出您的FOREIGN KEY
约束名称:SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME, -- <<-- the one you want!
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_NAME = 'My_Table';
如果在不同的表中有多个称为
WHERE
的表,也可以添加(添加到My_Table
子句中)架构。AND TABLE_SCHEMA = 'My_Database';
然后可以通过以下方式删除命名约束:
ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;
参考:1和2。
#2 楼
编辑了上面的查询。将“引用表名”更改为“表名”作为“引用表名”是被引用的表,因此原始查询的结果不会向您显示表上的外键。SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME, -- <<-- the one you want!
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
Table_name = 'case_qualitycontrolcase' and constraint_name = f
#3 楼
在MySql 5.7中。您可以找到表关系和关系规则。SELECT
DISTINCT a.TABLE_NAME,
a.CONSTRAINT_NAME,
b.DELETE_RULE,
b.UPDATE_RULE,
a.REFERENCED_TABLE_NAME,
a.COLUMN_NAME,
a.REFERENCED_COLUMN_NAME,
a.TABLE_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b USING (CONSTRAINT_NAME)
WHERE
a.TABLE_SCHEMA = "DATABASE_NAME" AND
a.REFERENCED_TABLE_NAME = 'TABLE_NAME'
ORDER BY a.TABLE_NAME ASC;
#4 楼
您可以直接执行此查询的输出以删除引用表的约束。
select concat('ALTER TABLE ' ,CONSTRAINT_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ' ,CONSTRAINT_NAME ,';' )
from information_schema.REFERENTIAL_CONSTRAINTS
where REFERENCED_TABLE_NAME='<<table to be dropped >> ';