我有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