Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 从2个表中删除_Mysql_Sql Delete - Fatal编程技术网

Mysql 从2个表中删除

Mysql 从2个表中删除,mysql,sql-delete,Mysql,Sql Delete,我的数据库中有两个表 用户 ID Username Randomkey 1 Dionne 938493 2 Liam 902303 3 James 232039 4 Sarah 320923 兴趣 ID User_ID Interest 1 3 Army 2 3 Boxing 3 3 Tennis 4 4

我的数据库中有两个表

用户

ID    Username    Randomkey
1     Dionne      938493
2     Liam        902303
3     James       232039
4     Sarah       320923
兴趣

ID    User_ID    Interest
1     3          Army
2     3          Boxing
3     3          Tennis
4     4          Make Up
在我的兴趣表中,“User_ID”等于我的users表中的“ID”

我想编写一个查询,当触发时,从我的“用户”表中删除该行,同时从兴趣表中删除与该用户相关的所有数据

我不知道如何做到这一点,而且我在谷歌也没有运气

如果有人能给我一些建议,或者至少告诉我在哪里可以找到这些信息,那将是一个很大的帮助

在我的脑海中,我认为这将是一个大致如下的过程:

DELETE FROM users, interests WHERE ID = '$userID' AND User_ID = '$userID'
删除用户、兴趣
来自用户
在users.ID=interests.User\u ID上左连接兴趣
其中users.ID=;

当然,如果
interests
表是InnoDB&对用户有一个外键约束,用户在删除级联时有一个
这将在用户被删除时自动完成。

如果您使用的是InnoDB,那么您可以为
interests(用户ID)定义一个外键约束
引用
users.ID
并在删除级联上具有
。然后您只需从
用户
中删除该行,并且
兴趣
中引用该用户的所有行将自动删除


如果您不使用InnoDB,那么Wrikken的解决方案可以正常工作。

查询可以工作吗?一般来说,我建议按users.ID=interests.USER\u ID连接这两个表。如果在delete CASCADE上使用了
,则不需要手动删除兴趣记录。在这种情况下,您只需要删除该用户。其余的将由DB删除@madflow“做查询工作”不,它不能,因为他没有定义哪个列属于哪个表。可以在中找到正确的查询。请注意,cascades仅适用于InnoDB引擎。谢谢Wrikken,我可以问一下ID周围的内容会做什么,或者为什么会在那里吗?没有,它只是在我的示例中放置ID的占位符,因此类似于
where users.ID=123
DELETE users, interests 
FROM users 
LEFT JOIN interests ON users.ID = interests.User_ID
WHERE users.ID = <id>;