我有4個表格:用戶,消息,文件,筆記。我想做一個查詢,刪除所有用戶的內容。將以下工作:這是一個有效的MySQL查詢?
DELETE FROM users, messages, files, notes WHERE userId = '$userId'
所有4臺已經拿到了列userId
我有4個表格:用戶,消息,文件,筆記。我想做一個查詢,刪除所有用戶的內容。將以下工作:這是一個有效的MySQL查詢?
DELETE FROM users, messages, files, notes WHERE userId = '$userId'
所有4臺已經拿到了列userId
可以在拆分的聲明四個單獨的語句,以刪除與該用戶ID相關聯的行。
DELETE FROM users WHERE userId = '$userId'
DELETE FROM messages WHERE userId = '$userId'
DELETE FROM files WHERE userId = '$userId'
DELETE FROM notes WHERE userId = '$userId'
另一種替代方法是在外鍵之間級聯刪除。
創建外鍵時,您可以選擇想要對子記錄進行刪除父記錄的操作。這通過在創建外鍵時指定ON Delete來表示。下面是在WHERE語句有一定的參考http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
,如果你有一個以上的表引用,你應該參考TABLE.COLUMN, 如:WHERE users.userid = '$userId'.
我建議做每桌1句
否。鏈接到的文檔表明,從多個表中刪除時必須使用USING子句。 – 2011-04-21 14:53:53
ERR .. no..Multiple表語法: 刪除[LOW_PRIORITY] [QUICK] [忽略] tbl_name [*] [,tbl_name [*]] ... FROM table_references [WHERE where_condition] – ethrbunny 2011-04-22 14:32:22
@ethrbunny你說得很對;我需要檢查我的視力。 – 2011-04-23 11:09:25
DELETE u, m, f, p
FROM users u
LEFT JOIN
messages m
ON m.user_id = u.id
LEFT JOIN
files f
ON f.user_id = u.id
LEFT JOIN
posts p
ON p.user_id = u.id
WHERE u.id = 1
這假定與id = 1
記錄在users
存在,否則什麼也不會被刪除。
但是,請注意,這不是非常有效,並且四個單獨的刪除將更好地工作。
在你的WHERE中,你有userId ='$ userId'。其他人可以糾正我,如果我錯了,但我敢肯定,userId會不明確,這個聲明不會運行。如果情況確實如此,那麼@John Hartsocks的答案應該可行。
這是除了點雖然。如果您擔心確保用戶被完全刪除,那麼您應該使用外鍵約束。你說當你刪除一個用戶時,你要確保刪除與該用戶有關的所有信息。如果將FK約束添加到每個具有用戶標識的表(除了用戶表,在這種情況下,它將具有主鍵約束),則不應首先確保所有其他用戶刪除用戶引用該用戶的數據被刪除。
它會工作,查詢是在一個PHP字符串。 – 2011-04-21 14:59:48
我不是指$ userId,我指的是左側的userId模糊。儘管人們可能會看到並認爲它可行,但我很確定mySQL不會執行該聲明。我相信在PHP方面,它會正確地構建查詢(讀取:字符串)。 – Dave 2011-04-21 15:07:48
你說「以下工作?」你爲什麼不先試試自己? – 2011-04-21 14:52:13
@Naveed我在這個網站上的任何地方都沒有看到任何規則,當我提出問題時,您會被徵稅。 – 2011-04-21 14:54:54