[英]MySQL: Delete rows from either of two tables
我有兩個這樣的表設置:
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
表中的所有行。
這是我所擁有的:
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
表。
出於所有實際原因,此查詢應該在所有情況下都可以工作(因為您將如何為不存在的用戶保存用戶元數據?),但以防萬一,我想確保該查詢還可以刪除user_meta
中的任何行如果用戶在user_users
表中不存在,則該表具有UserID
。
所以,我想這個查詢在刪除任何行user_meta
與表UserID = 99
,但它沒有,因為沒有ID
的99中存在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?
這種情況是使用級聯刪除約束的良好選擇。 要在子記錄user_meta
表每當父記錄被刪除user_users
被刪除。 假設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
被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.