MySQL Workbench - 将删除操作中的所有表外键一次性设置为NO ACTION

时间:2016-05-25 10:50:39

标签: mysql mysql-workbench

我有一个包含许多表的大型数据库,并且“on-delete”操作设置为级联所有这些表。是否可以一次性将此选项更改为“无操作”,而无需在Workbench中打开每个表和每个关系属性?

我认为在Workbench界面中不可能,但我敢打赌它可以使用循环遍历所有表并更改关系的游标以编程方式完成

1 个答案:

答案 0 :(得分:-1)

有必要删除约束并将其添加到ON DELETE CASCADE。

您可以使用SQL拥有所有表的列表,以执行以下操作:

一键删除

SELECT concat('ALTER TABLE ' , TABLE_NAME,' DROP FOREIGN KEY ' ,CONSTRAINT_NAME ,';' )
FROM  information_schema.REFERENTIAL_CONSTRAINTS  
WHERE  constraint_schema = '<database>';

2-全部添加

SELECT concat('ALTER TABLE ' , TABLE_NAME,' ADD FOREIGN KEY (', column_name ,') REFERENCES ', REFERENCED_TABLE_NAME ,' (', REFERENCED_COLUMN_NAME,') ON DELETE CASCADE;' )
FROM  information_schema.key_column_usage where 
constraint_name <>'PRIMARY' 
AND TABLE_SCHEMA = '<database>';

您可以复制以上查询的结果sql并执行。

注意:在存储第二个查询给出的信息以再次创建之前(例如在文本文件中),请不要执行第一个“全部丢弃”。