mysql从多个表中删除的问题

问题描述 投票:0回答:1

我正在使用这个查询: 删除T1、T2 从表 1 T1,表 2 T2

mysql 中工作似乎不一致。

如果两个表都包含行,则每个表中的所有行都会被删除,正如我所料。 但如果一个表已经为空,则另一张表将被忽略并且不会删除任何行。

这是正确的行为还是错误?

mysql sql-delete
1个回答
0
投票

这是正确的行为。

对此进行测试以观察针对没有行的表的叉积连接返回空结果:

mysql> select * from table1, table2;
Empty set (0.00 sec)

如果要确保包含 table1 中的行,请使用外连接:

mysql> select * from table1 left join table2 on true;
+----+------+
| id | id   |
+----+------+
|  1 | NULL |
|  2 | NULL |
|  3 | NULL |
+----+------+

我使用 SELECT 只是为了演示返回非空结果。您可以使用与 DELETE 相同类型的联接,并查看它是否删除了行。

mysql> delete table1, table2 from table1 left join table2 on true;
Query OK, 3 rows affected (0.00 sec)

mysql> select * from table1;
Empty set (0.00 sec)

你可能会问如果table1没有行,而你想从table2中删除行怎么办?或者您不知道两个表是否没有行。那么你需要一个 FULL OUTER JOIN,但 MySQL 不支持这种类型的连接。

为什么不连续运行两个 DELETE 呢?如果您要删除所有行,那么在一个连接的 DELETE 语句中执行此操作没有任何好处。

DELETE FROM table1;
DELETE FROM table2;

如果需要将它们一起提交,请启动事务并在两次删除完成后提交。

© www.soinside.com 2019 - 2024. All rights reserved.