mysql:从两个表中删除行

5f0d552i  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(227)

我有两张这样的table: user_usersID ColA ColB 55 This That 56 Other Stuffuser_meta ```
ID UserID MetaName MetaValue
1 56 some_name some_value
2 56 other_name other_vaue
3 99 this_too equals_this

因此,可以在 `user_meta` 归属于给定 `UserID` . 删除用户时,还需要删除 `user_meta` 属于该用户的表。
以下是我所拥有的: `DELETE user_users, user_meta FROM user_users LEFT JOIN user_meta ON user_meta.UserID = user_users.ID WHERE user_users.ID = 56` 这在以下情况下非常有效:
如果用户存在于 `user_users` 但中不存在此用户的行 `user_meta` 如果用户存在于 `user_users` 中存在此用户的行 `user_meta` 问题是如果(出于某种原因)用户id存在于 `user_meta` 但不是在 `user_users` ,则不会从 `user_meta` table。
出于所有实际原因,这个查询应该在所有情况下都能工作(因为您如何为一个不存在的用户保存user meta?),但为了以防万一,我想确保查询也会删除 `user_meta` 带有 `UserID` 即使该用户不存在于 `user_users` table。
所以,我希望这个查询删除 `user_meta` 带的表格 `UserID = 99` 但事实并非如此,因为没有 `ID` 存在于 `user_users` 表格:

DELETE user_users, user_meta FROM user_users LEFT JOIN user_meta ON user_meta.UserID = user_users.ID WHERE user_users.ID = 99

如何更新此查询以从其中一个/两个表中删除,而不管其他表中是否存在id?
dvtswwa3

dvtswwa31#

这种情况很适合使用级联删除约束。你想把孩子的档案 user_meta 表中的父记录时要删除的表 user_users 已删除。假设已存在外键约束 UserIDuser_meta 表,您可以尝试:

ALTER TABLE user_meta DROP FOREIGN KEY user_id_key;

ALTER TABLE user_meta
ADD CONSTRAINT user_id_key
FOREIGN KEY (UserID) REFERENCES user_users (ID)
ON DELETE CASCADE;

这假设您已经在上有了外键约束 user_meta#UserID . 如果你没有,那就忽略第一个 ALTER TABLE 声明。
使用此约束,从 user_users 将自动导致所有子记录 user_meta 将被删除。

相关问题