我有两个表,名称为
users
,user_friends
。 user 有超过 1000 万条记录,user_friends 有超过 6 亿条记录。问题是它没有约束。即,当用户被删除时,他们的好友列表将保留在数据库中。工作正常。但现在我们实现了一个具有 user_social_friends 的新功能。我已经应用了其中的所有约束。
现在我想像这样对
user_friends
表应用约束
SQL query:
ALTER TABLE `user_friends` ADD CONSTRAINT `user_id_key_contstraint` FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
MySQL said: Documentation
#1452 - Cannot add or update a child row: a foreign key constraint fails (`callerap_finder`.`#sql-d9fad_24e`, CONSTRAINT `user_id_key_contstraint` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
我的问题是,如何在 user_friends 表上应用约束,以便在 user_friends 表中所有这些记录删除或设置为 null 谁的用户被删除。
您遇到的错误表明 user_friends 表中存在带有 userId 的记录,而 user 表中不存在该记录。为了能够实现您想要做的事情,首先确保有效的 userId 附加到此类用户,或为此类用户分配 null 值。
这是你可以做的。
// mysql
SELECT user_friends.user_id
FROM user_friends
LEFT JOIN user ON user_friends.user_id = user.id
WHERE user.id IS NULL;
// mysql
UPDATE user_friends
LEFT JOIN user ON user_friends.user_id = user.id
SET user_friends.user_id = NULL
WHERE user.id IS NULL