在InnoDB / MySQL中使用外键约束和级联

时间:2011-01-06 11:11:49

标签: sql mysql foreign-keys innodb cascade

我有一个相当大的InnoDB / MySQL关系数据库。我到处都使用了外键约束,再加上“ON UPDATE CASCADE”(以及“ON DELETE CASCADE”)。

此数据库是CRM系统的一部分,因此包含用户,然后将帐户附加到这些用户。

通常,我们发现用户表中有重复的条目,我们想合并它们。

一种选择是编写遍历数据库的脚本,更新所有相关表中的user_id列。但是,每当数据库结构发生变化时,这无疑会中断。

我想探索的另一个选项是使用CASCADE。如果我想合并A人和B人,我可以这样做:

UPDATE user SET id = $A.id$ WHERE id = $B.id$ limit 1

然后,此更改应传播通过依赖于用户表的所有表。

然后我必须从用户中删除其中一个重复的行:

DELETE FROM user WHERE id = $A.id$ LIMIT 1

不幸的是,这种方法存在两个问题。

首先,user.id列是主键,因此是唯一的。

其次(假设我已将user.id从PRIMARY KEY转换为常规INDEX),如果用户中存在重复的ID,并且我删除了一个,则删除依赖表中的所有行。

我有办法解决这些问题吗?

1 个答案:

答案 0 :(得分:0)