gpt4 book ai didi

php - MySQL:从两个表中的任意一个删除行

转载 作者:行者123 更新时间:2023-11-29 10:08:05 24 4
gpt4 key购买 nike

我有两个表设置如下:

user_users

ID    ColA    ColB
55 This That
56 Other Stuff

user_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 表中归属于该用户的所有行。

这是我所拥有的:

从 user_users LEFT JOIN user_meta 删除 user_users、user_meta ON user_meta.UserID = user_users.ID,其中 user_users.ID = 56

这在以下场景中非常有用:

  1. 如果 user_users 中存在该用户,但 user_meta 中不存在该用户的行
  2. 如果user_users中存在该用户,并且user_meta中存在该用户的行

问题是,如果(由于某种原因)用户 ID 存在于 user_meta 中但不存在于 user_users 中,则不会从 user_meta< 中删除这些行 表。

出于所有实际原因,此查询应该在所有情况下都有效(因为如何为不存在的用户保存用户元?),但为了以防万一,我想确保即使 user_users 表中不存在该用户,查询也会删除 user_meta 表中带有 UserID 的任何行。

因此,我希望此查询删除 user_meta 表中包含 UserID = 99 的所有行,但事实并非如此,因为没有 ID user_users 表中存在 99 个:

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?

最佳答案

这种情况非常适合使用级联删除约束。您希望在删除 user_users 中的父记录时删除 user_meta 表中的子记录。假设 user_meta 表中的 UserID 已经有外键约束,您可以尝试:

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 中的所有子记录被删除。

关于php - MySQL:从两个表中的任意一个删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51510070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com