[英]MySQL Delete rows from multiple tables
我有2個表用戶,並且pd有一個公用列i_uid
為了從兩個表中刪除具有i_uid為1010的一行,我在php腳本中使用mysqli :: query發出了以下語句
DELETE
FROM `users`,`pd`
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010;
有什么問題嗎?
由於您要從多個表格中刪除行,因此唯一缺少的是指定要刪除行的表格,
DELETE `users`,`pd`
FROM `users`, `pd`
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010;
在上面的查詢中,它將從兩個表中刪除行。 我建議使用ANSI聯接來更改語句,如下所示,
DELETE a, b
FROM users a
INNER JOIN pd b
ON a.i_uid = b.i_uid
WHERE a.i_uid = 1010
如果要從users
表中刪除,
DELETE a
FROM users a
INNER JOIN pd b
ON a.i_uid = b.i_uid
WHERE a.i_uid = 1010
使用“ Left Join
並指定要在其上刪除相應行的表。
DELETE users, pd
FROM users, pd
LEFT JOIN pd
ON pd.i_uid = users.i_uid
WHERE users.i_uid = 1010
其他答案是正確的,但由於沒有人提及,我會這樣做。 您可以使用InnoDB引擎並指定外鍵和DELETE ON CASCADE 。 這樣,每次刪除用戶時,它都會從不同的表中刪除所有引用行。
閱讀有關外鍵的信息,並級聯刪除
為了簡單起見,我建議僅使用兩個查詢:
DELETE FROM `users` WHERE `i_uid` = 1010;
DELETE FROM `pd` WHERE `i_uid` = 1010;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.