设为首页 加入收藏

TOP

锁的理解
2014-11-24 03:24:09 来源: 作者: 【 】 浏览:2
Tags:理解
锁的理解
A,B两个service都注入了事物。
(1)A向 数据库的一张表插入了一条记录,service方法体并没有走完,此时,B也向这张表插入相同的记录,B会阻塞。直到A的方法体走完,事物提交,锁才释放,这时B会检测到主键冲突,报错。
(2)A更新数据库的一张表的一条记录,A没有走完,此时B也来更新这条记录,B会阻塞,直到A的方法体走完,事物提交,锁才释放,这时B才会获得锁继续走下去。
(3)A更新数据库的一张表的一条记录,B更新这张表的其他记录,不会阻塞
(4)A插入一条记录,B插入不同的记录,不会阻塞
(5)查询不会加锁
悲观锁,正如其名,它指的是对数据被外界(包括本 系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。
一个典型的倚赖数据库的悲观锁调用:
select * from account where name="Erica" for update
这条 sql 语句锁定了 account 表中所有符合检索条件( name="Erica" )的记录。 本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQLite插入效率评测 下一篇简单例子理解数据库事务

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 C 语言或者限制使 (2025-12-25 08:50:05)
·C++构造shared_ptr为 (2025-12-25 08:50:01)
·既然引用计数在做 GC (2025-12-25 08:49:59)
·Java 编程和 c 语言 (2025-12-25 08:19:48)
·. net内存管理宝典这 (2025-12-25 08:19:46)