事务隔离级别 - 选择正确的级别

时间:2014-01-11 14:39:23

标签: sql sql-server transactions isolation-level

我是一名sql初学者,我需要有关事务隔离级别的帮助。 我需要知道哪种隔离级别最适合以下情况以及原因:

数据库中有3个表:

  • 动物(通过插入芯片注册)KEY-ID_CHIP REF CHIPS
  • 芯片(可以但不必插入动物)KEY - ID_CHIP。其中一个属性是“INSERTED_BY”,它引用第三个表PEOPLE(给出插入芯片的人的ID,如果没有插入则为NULL)
  • 人物 - KEY:ID

现在让我们考虑以下事务:已经在动物中插入了新芯片。更新数据库的人必须改变两件事:

  • 向ANIMALS添加新实体
  • 更新插入的芯片记录(将INSERTED_BY属性从NULL更改为插入芯片的人的ID)

第二个事务是控制器事务,它检查ANIMALS中的实体数是否等于具有INSERTED_BY属性不等于NULL的CHIPS数。 下图显示了一种情况: Situation

谁能告诉我哪种四肢隔离级别最好?为什么?我被困在这里..任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的情况很容易,因为其中一个交易是纯粹的读取交易。查看快照隔离。在SNAPSHOT隔离级别下运行阅读器将为其提供整个数据库的时间点一致视图。不会锁定或等待锁定。

这意味着在t2时,C2将无法看到插入物。

这很容易实现并完全解决问题。

如果没有 SNAPSHOT隔离,您需要SERIALIZABLE隔离,并且您将陷入僵局。现在您需要调查锁定提示。更复杂,没有必要。