MySql忽略外键错误

标签 mysql foreign-keys foreign-key-relationship

我有一个包含大量数据的表。该表中的 PK 在其他 7 个表中被引用(每个表也包含大量数据)。现在,由于主表和其他 7 个表之间从来没有任何 FK,我必须找到一种方法从主表中删除所有其他 7 个表中的任何其他行未引用的行。 这就是我的想法(所有解决方案都应使用存储过程实现):

0)“从 id 不在 (select .. table 1) 且不在 (select..table2)...table 7 的主表中删除”是不可能的,它需要很长时间才能完成。

1) 创建一个存储过程,该过程将在所有 7 个表中生成不同的、逗号分隔的已用 ID 集,并从主表中删除任何集合中不存在的那些 ID。

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

解决方案 2 对我来说听起来最好,但我有一个问题 - 我不知道如何告诉 mysql “从主表中删除但跳过抛出 FK 异常的行”:\ 不能使用“删除忽略”,因为它会在遇到抛出 FK 错误的行时立即停止删除。

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

最佳答案

您可以使用此处提供的一些资源:

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;//摆脱当前约束 ALTER TABLE table2 DROP FOREIGN KEY fk_name2;

SET FOREIGN_KEY_CHECKS=0;//在你删除之前

SET FOREIGN_KEY_CHECKS=1;//在你删除之后

关于MySql忽略外键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26014500/

相关文章:

mysql - 一张表用于多个 hasman 关系

mysql - 省略公共(public)记录的 SQL 外连接

mysql - 外键相关数据实现的理论解决方案

php - MySQL 子查询错误 : SQLSTATE[42S21]:

mysql - 无法为包含文件的表添加外键

MySQL 外键约束 - 无法添加或更新子行

mysql - DBSQL 将列中一个实体的值插入到不同列中的另一个实体

php - sqlite中的PDO::beginTransaction()和外键冲突

tsql - T-SQL外键检查约束

postgresql - Geodjango/postgres 外键关系,如空间索引