此问题已在此处有答案:
How to delete from multiple tables in MySQL?(7个回答)
六年前就关门了。
我有4个表,每个表中存储有关用户的不同信息。每个表都有一个带有user_id的字段,用于标识哪个行属于哪个用户。如果我想删除用户,这是从多个表中删除该用户信息的最佳方法吗?我的目标是在一个查询中完成它。
查询方式:
"DELETE FROM table1 WHERE user_id='$user_id';
DELETE FROM table2 WHERE user_id='$user_id';
DELETE FROM table3 WHERE user_id='$user_id';
DELETE FROM table4 WHERE user_id='$user_id';";
9条答案
按热度按时间5m1hhzi41#
显然,这是可能的。关于manual:
您可以在一个WHERE语句中指定多个表,以便根据WHERE子句中的特定条件从一个或多个表中删除行。但是,不能在多表对象中使用ORDER BY或LIMIT。table_references子句列出连接中涉及的表。它的语法在www.example.com节“JOIN连接”中描述12.2.8.1。
手册中的示例为:
应适用1:1。
bxfogqkk2#
您可以使用
ON DELETE CASCADE
选项在表上定义外键约束。然后从父表中删除记录将从子表中删除记录。
查看此链接:https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html
bihw5rsg3#
您还可以使用以下查询:
DELETE FROM Student, Enrollment USING Student INNER JOIN Enrollment ON Student.studentId = Enrollment.studentId WHERE Student.studentId= 51;
2w2cym1i4#
在这种情况下,连接语句过于复杂。最初的问题只涉及同时从多个表中删除给定用户的记录。直觉上,你可能会期望这样的工作:
当然不是但是,与其编写多个语句(冗余且低效),使用连接(对新手来说很难)或外键(对新手来说更难,并且在所有引擎或现有数据集中都不可用),您可以使用 LOOP简化代码!**
作为一个使用PHP的基本示例(其中$db是您的连接句柄):
希望这对某人有帮助!
bvjxkvbb5#
从两个带有外键的表中,你可以尝试这个查询:
gjmwrych6#
可以使用以下查询从多个表中删除行,
DELETE table1, table2, table3 FROM table1 INNER JOIN table2 INNER JOIN table3 WHERE table1.userid = table2.userid AND table2.userid = table3.userid AND table1.userid=3
2o7dmzc57#
documentation for DELETE告诉您多表语法。
或者:
g0czyy6m8#
通常,你不能一次从多个表中删除,除非你使用JOIN,如其他答案所示。
但是,如果你的所有表都以某个名称开头,那么这个查询将生成执行该任务的查询:
然后将它(在shell中)导入mysql命令执行。
例如,它将生成类似于:
更多shell导向的例子是:
如果你只想使用MySQL,你可以考虑更高级的查询,比如:
上面的例子基于:MySQL – Delete/Drop all tables with specific prefix。
rjjhvcjd9#
通常,我希望这是一个触发器中强制执行的“级联删除”,你只需要删除主记录,然后所有的depepndent记录都会被触发器逻辑删除。
这个逻辑跟你写的差不多。