2014-09-24 160 views
2

我有一个有很多数据的表。该表中的PK在7个其他表中被引用(其中每个表也包含大量数据)。现在,由于在主表和其他7个表之间从来没有任何FK,所以我必须找到一种方法来删除主表中所有未被其他7个表中任何其他表引用的主表中的所有行。 这就是我所想的(所有的解决方案应该使用存储过程来实现):从主表其中id不在(选择..表1),而不是在(选择MySql忽略外键错误

0)“删除。 。表格2)...表格7“是不可能的,需要永久完成。

1)创建一个存储过程,它将在所有7个表中使用不同的逗号分隔的一组使用的id,并从主表中删除那些不存在于任何组中的id。

2)在这7个表中的每一个表中进行“限制”FK并执行“从main_table中删除”。

解决方案No2对我来说听起来最好,但我有一个问题 - 我不知道如何告诉MySQL“从主表中删除,但跳过排FK异常的行”:\ “删除忽略”无法使用因为它一旦碰到抛出FK错误的行就会停止移除。

所以,我必须问你:有没有办法让我在这7个表中的每一个表上创建“限制”FK,并运行“从main_table删除”一些选项,它将简单地跳过任何引发“ FK约束“错误?

回答

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

+0

我检查这些链接。现在我有点困惑:)我想我需要FK,为什么我应该禁用它的检查?我的想法是使用FK检查来知道哪一行正在被引用,哪些不是。问题是我需要在“main_table”中保留一些(未知的)数据量。我没有外键问题,因为目前我没有任何:) – guest86 2014-09-24 11:27:31