我有一张包含大量数据的表格。该表中的PK在其他7个表中被引用(每个表中的每个表都包含大量数据)。现在,由于主表和其他7个表之间从来没有任何FK,我必须找到一种方法来从主表中删除所有其他7个表中没有任何其他行引用的行。 这就是我所想的(所有解决方案都应该使用存储过程来实现):
0)"从主表中删除,其中id不在(选择..表1)而不在(select..table2)...表7"是不可能的,它将需要永远完成。
1)创建一个存储过程,该存储过程将在所有7个表中使用不同的逗号分隔的已用过的ID集合,并从主表中删除任何集合中不存在的ID。
2)制定"限制"在这7个表中的每一个表中都执行FK并执行"从main_table"中删除。
解决方案No2听起来对我来说最好,但我有一个问题 - 我不知道如何告诉mysql"从主表中删除但是跳过抛出FK异常的行" :\ "删除忽略"无法使用,因为一旦它突然抛出FK错误就会停止删除。
所以,我必须问你:我有没有办法创造"限制"在这7个表中的每个表上运行FK并从#main;#34;删除#34;有一些选项可以简单地跳过抛出" FK约束"错误?
答案 0 :(得分:2)
您可以使用此处提供的一些资源:
How to temporarily disable a foreign key constraint in MySQL?
http://gauravsohoni.wordpress.com/2009/03/09/mysql-disable-foreign-key-checks-or-constraints/
简而言之,您可以禁用外键约束或删除它:
ALTER TABLE table1 DROP FOREIGN KEY fk_name1; //get rid of current constraints
ALTER TABLE table2 DROP FOREIGN KEY fk_name2;
OR
SET FOREIGN_KEY_CHECKS=0; //before your delete
SET FOREIGN_KEY_CHECKS=1; //after your delete