插入行的最佳事务隔离级别是哪一个?

时间:2018-09-07 12:56:14

标签: transactions isolation-level

我需要了解哪种是最好的事务隔离,可以用来做这两项事情:

  1. 在表A中保存一行
  2. 在表B中保存一行

我知道,如果我使用类似事务隔离的方法SERIALIZABLE,它可以正常工作,但是我需要知道是否可以使用READ_COMMITEDREPEATEBLE_READ。我只在两个不同的表中保存两行,所以我不执行READ操作,所以我认为READ_COMMIT是最好的解决方案?有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

是否需要将新的A和B行保留在一起并且只能一起看到?如果您什么都没读,并且A和B不一定要同时出现,那么您甚至不需要在这里进行交易。

这是一个很好的相关读物:https://www.sqlpassion.at/archive/2014/01/21/myths-and-misconceptions-about-transaction-isolation-levels/

此外,以下内容与我之前所说的(在此已被删除/更新)相矛盾:

https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/transaction-isolation-levels?view=sql-server-2017

  

读取未提交:事务不是相互隔离的。如果DBMS支持其他事务隔离级别,则它将忽略用于实现这些级别的任何机制。为了避免对其他事务产生不利影响,在“未提交读”级别运行的事务通常是只读的

它也很好地描述了其他状态。听起来“读已提交”将是最好的选择。

  

已提交读:事务在该事务上持有一个读锁(如果只读取该行)或写锁(如果它更新或删除该行)。   当前行以防止其他事务更新或删除   它。当事务离开当前事务时,它将释放读取锁   行。它持有写锁,直到提交或回滚为止。

这将使您在评论中提及的删除和插入操作安全进行。