Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是一个有效的MySQL查询吗?_Mysql_Sql - Fatal编程技术网

这是一个有效的MySQL查询吗?

这是一个有效的MySQL查询吗?,mysql,sql,Mysql,Sql,我有4个表:用户、消息、文件、注释。我想做一个查询,如果一个用户被删除了,它将删除他的所有内容。将进行以下工作: DELETE FROM users, messages, files, notes WHERE userId = '$userId' 所有4个表都有一列userId您可以将语句拆分为四个单独的语句,以便删除与userId关联的行 DELETE FROM users WHERE userId = '$userId' DELETE FROM messages WHERE userId

我有4个表:用户、消息、文件、注释。我想做一个查询,如果一个用户被删除了,它将删除他的所有内容。将进行以下工作:

DELETE FROM users, messages, files, notes WHERE userId = '$userId'

所有4个表都有一列
userId

您可以将语句拆分为四个单独的语句,以便删除与userId关联的行

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语句中,如果有多个表引用,则应参考table.COLUMN, 例如:
WHERE users.userid='$userid'。
我建议每个表格写一句话

是的

这假设
id=1
的记录存在于
users
中,否则不会删除任何内容


但是,请注意,这不是很有效,四次单独的删除效果会更好。

在WHERE中,您有userId='$userId'。如果我错了,其他人可以纠正我,但我非常确定用户ID是不明确的,并且该语句不会运行@如果确实如此,约翰·哈特索克的答案应该是可行的


但这不是重点。如果您担心确保用户被完全删除,那么应该使用外键约束。您说过,删除用户时,您希望确保删除与该用户相关的所有信息。如果将FK约束添加到每个具有用户id的表中(除了users表之外,在这种情况下,它将具有主键约束),则在不首先确保删除引用该用户的所有其他数据之前,您不可能删除该用户。

您说“以下操作可行吗?”你为什么不先试试自己?@Naveed我在这个网站上没有看到一条规定,当我问问题时,你要纳税。没有。您链接到的文档表明,从多个表中删除时必须使用USING子句。Err。。否..多表语法:删除[LOW_PRIORITY][QUICK][IGNORE]tbl_name[.*][,tbl_name[.*]]。。。从表[WHERE\u条件]中,是否有机会消除所有负面影响?以消除反对票?我试过了,但除非答案被编辑,否则无法完成。啊哈,原来我可以自己编辑;所以一票否决removed@Johan:因为如果在至少一个表中没有
user_id=1
的记录,内部联接将不会删除任何内容。我指的不是$userId,而是左侧的userId不明确。尽管人们可能会认为这是可行的,但我很确定mySQL不会执行该语句。我相信在php方面,它会正确地构建查询(read:string)。
[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]
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