Mysql - 使用join vs两个删除语句删除

时间:2014-02-19 06:50:05

标签: mysql sql

我有两张带相关键的表。我想选择从tbl_one和tbl_two行中删除具有相关键的行的最佳方法。我尝试使用DELETE JOIN正确地执行此操作,但我发现另一种方法非常简单,我使用了两个删除语句。你能告诉我哪个更好吗?

第一种方法:

DELETE tbl_one,
tbl_two FROM tbl_one 
JOIN tbl_two ON tbl_one.id = tbl_two.tbl_one_id WHERE tbl_one.id = 1

第二种方法:

DELETE FROM tbl_one WHERE id =1;
DELETE FROM tbl_two WHERE tbl_one_id =1;

2 个答案:

答案 0 :(得分:1)

操作的主要关注点应该是孤立的(无论是否兼有) 你应该将操作放在事务块中。 在我看来,第一个查询效果更好,因为服务器可以通过单个查询到达保存点,而不是解析和执行两个查询。

关闭foreign_key_check全局变量并运行查询并在之后将其打开。

注意:你可以使用mysql提供的级联外键行为。

答案 1 :(得分:0)

只要您使用事务,使用单个或多个语句来更改数据库内容并不重要。如果没有交易,可能会出现两个问题:

  1. 访问 in between 之间的另一个进程运行一个语句,然后查询“unclean”数据库的状态,因为只处理了部分语句。这可能总是发生在多个客户端可以同时使用数据库的系统中,例如在网页等中。

  2. 无论出于何种原因,后续查询可能会失败。在这种情况下,只处理了部分陈述,而另一部分则没有。这使您的数据库再次处于“未定义”状态,在这种情况下持续存在。您必须通过错误检测手动防止这种情况,但即便如此,也可能无法解决问题。

  3. 关系数据库管理系统为此提供transactions。事务允许从逻辑的角度将几个语句“捆绑”到单个语句。您启动事务,运行语句,然后关闭事务。如果出现意外情况,您可以随时“回滚”您的事务,这样您就可以像在事务开始之前一样获得稳定和干净的数据库情况。