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

Sim*_*mon 5 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的数量.下图显示了一种情况: 情况

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

usr*_*usr 2

您的情况很简单,因为其中一个事务是纯读取事务。查看快照隔离。在隔离级别下运行读取器SNAPSHOT将为其提供整个数据库的时间点一致视图。不会获取或等待任何锁。

这意味着在 t2 时,C2 将看不到插入内容。

这非常容易实现,并且可以彻底解决问题。

如果没有 SNAPSHOT隔离,你就需要SERIALIZABLE隔离,并且会陷入很多僵局。现在您需要研究锁定提示。更复杂,没有必要。