我有一个相当大的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,并且我删除了一个,则删除依赖表中的所有行。
我有办法解决这些问题吗?
答案 0 :(得分:0)