我正在阅读有关数据库锁定(悲观,乐观)机制的信息,
会话 1:
t1: 打开事务:
t2: sleep(3 sec)
t5: updte user set name='x' where id =1
会话 2: t2:update user set name='y' where id=1
我的疑问是: 1. t5 会发生什么 2. 它是否必须与隔离级别做任何事情?如果是的话,不同隔离级别的行为会是什么。3. database(mysql,oracle)是否只做悲观锁?
我正在阅读有关数据库锁定(悲观,乐观)机制的信息,
会话 1:
t1: 打开事务:
t2: sleep(3 sec)
t5: updte user set name='x' where id =1
会话 2: t2:update user set name='y' where id=1
我的疑问是: 1. t5 会发生什么 2. 它是否必须与隔离级别做任何事情?如果是的话,不同隔离级别的行为会是什么。3. database(mysql,oracle)是否只做悲观锁?
让我以相反的顺序回答您的问题,因为这样我就不必重复某些部分。
optimistic lock
,optimistic concurrency control
而是使用。悲观锁定策略是一种涉及数据库级锁定的策略,由所有使用事务的 rdbms 实现 - 包括 mysql 和 innodb。Mysql 对乐观并发控制没有任何数据库级别的支持。这并不意味着其他 rdbms 也不支持 OCC。你需要查看他们的手册。
where
没有更新。隔离级别主要影响事务如何读取数据,而不是如何更新数据。
update
首先发出以及该事务打开多长时间。无论哪个会话首先执行更新,都会进行更改并在索引记录上设置排他锁。在第一个事务完成之前,另一个事务将无法执行更新。如果第一个事务运行了很长时间,那么另一个事务在等待释放锁时可能会超时。