这是有效的MySQL查询吗?

| 我有4个表格:用户,消息,文件,注释。我要查询一个删除所有用户资料的查询。请问以下工作:
DELETE FROM users, messages, files, notes WHERE userId = \'$userId\'
所有4个表的列都为
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来表示。这是一些参考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]
    
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
假设
users
中存在带有
id = 1
的记录,否则将不删除任何内容。 但是请注意,这不是很有效,四个单独的删除会更好。     
在where语句中,如果您有多个表引用,则应该引用TABLE.COLUMN, 例如:
WHERE users.userid = \'$userId\'.
我建议每桌做一句话     
在您的WHERE中,您有userId = \'$ userId \'。如果我错了,其他人可以纠正我,但是我很确定userId会模棱两可,并且该语句不会运行。 @John Hartsocks的答案应该可以,尽管确实如此。 不过,这还不重要。如果您担心要确保用户被完全删除,则应该使用外键约束。您说的是删除用户时,您要确保删除与该用户有关的所有信息。如果将FK约束添加到具有用户ID的每个表中(除了users表,在这种情况下它将具有主键约束),则在没有首先确保所有其他用户不存在的情况下,应该无法删除用户引用该用户的数据被删除。     
是。 http://dev.mysql.com/doc/refman/5.0/en/delete.html     

要回复问题请先登录注册