SQL Transaction与多个语句

时间:2012-07-12 12:14:08

标签: sql database transactions

我将一些数据插入到两个不同的表中。我目前正在使用2个不同的SQL语句,但我从这个网站上读到可以在事务中执行此操作。

关于数据的大小,哪种方法更好?目前我只是将2个单独的行同时插入2个不同的表中,无序,所以我认为2个语句更好。

编辑:对不起,我不是很清楚:我正在处理的数据库是微不足道的,我只是想知道事务与2个单独语句的性能差异,以及执行更多语句时的性能差异。

4 个答案:

答案 0 :(得分:9)

Well Transaction为您提供了回滚sql语句的功能。例如,您有两个表table1和table2,只有在table1中正确插入数据时才要在table2中插入数据,如果在table1中插入数据时发生错误,则不会在table2中插入数据,在这种情况下您将使用事务。

交易的四个基本功能:

  1. Atomicity:当交易中涉及两条或多条信息时,要么所有的提交都被提交,要么都没有提交。
  2. Consistency:在交易结束时,存在新的有效数据形式或数据返回其原始状态。
  3. Isolation:在事务期间(在提交或回滚之前),数据必须保持隔离状态,并且其他事务无法访问。
  4. Durability:在对事务进行评估后,即使服务器出现故障或重新启动,数据的最终状态仍然可用。

答案 1 :(得分:3)

如果数据是相关的,这意味着第二个sql存储的数据依赖于,以某种方式与第一个查询存储的数据链接和/或反之亦然,那么你应该考虑制作一个transaction。以这种方式,如果其中一个查询遇到问题,您可以rollback。您可以在try-catch语句中实现此功能。如果查询彼此完全无关,则可以使用两个单独的SQL语句。

但我认为,由于两个表的数据相同,因此最好进行交易。因此,如果您将来必须进行连接,删除等操作,那么您就拥有了一致的数据库。

答案 2 :(得分:1)

有一件事与另一件事无关。

将它们放在同一个交易中的意义既可以发生,也可以不发生。

如果您的第一次插入成功而第二次插入失败,那么您需要问的问题是什么,并回答。

就个人而言,由于我在某些操作中进行了两次插入操作,即使第二次失败的后果在其他地方处理,单个事务也是有意义的。

答案 3 :(得分:1)

您是否需要执行这两个插入原子(即它们必须成功或失败,但您不能成功,另一个失败)?

  • 如果是,那么您必须将它们包含在同一笔交易中。
  • 如果不是,那么您可以选择一些自由度,如下所述......

事务是ACID而“D”代表"durable",这实际上意味着DBMS必须等到数据被物理写入永久存储器(而不是仅仅将其存储在缓存中并立即移动上)。出于性能原因,你会希望这种“持久性等待”相对较少,并且在这方面有一个事务而不是两个(每个语句一个)更好。当然,这会使它们成为原子,这可能是也可能不是,所以你必须平衡性能和期望的行为。