在数据库中,行级锁定是ACID,乐观并发还是两者兼有的示例?

问题描述

同时写入
在nosql数据库中还会发生什么?

解决方法

我将忽略NoSQL部分,否则我将因为过于关注而不得不关闭该问题。

行级锁定是关系数据库用来提供 isolation (ACID的I)的一种技术。隔离意味着并发数据库会话彼此隔离–数据库试图使它们不受彼此活动的影响。

具体来说,如果两个并发会话试图修改同一数据行,则它们必须“轮流”:第二个并发会话必须等待,直到第一个会话的事务完成为止。此等待通常很短,不会造成伤害,但是可以避免不一致( consistency 是ACID的C)。

行级锁定(通常是锁定)是悲观锁定的一部分:锁定行以防止其他会话在处理该行时弄乱该行。它是通过SELECT ... FOR UPDATE完成的。之所以称其为“悲观”,是因为它反映出一种心态,例如“我希望有人在我处理该行时尝试修改该行,因此请确保对其进行锁定”。

乐观锁定的名称不正确,因为实际上没有进行任何锁定。您不会阻止并发事务修改您感兴趣的行。而是稍后检查该行是否已被并发事务修改,如果已被修改,请再次尝试操作。