热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

锁的理解

锁的理解A,B两个service都注入了事物。(1)A向数据库的一张表插入了一条记录,service方法体并没有走完,此时,B也向这张表插入相同的记录,B会阻塞。直到A的方法体走完,事物提交,锁才释放,这时B会检测到主键冲突,报错。(2)A更新数据库的一张表的

锁的理解 A,B两个service都注入了事物。 (1)A向数据库的一张表插入了一条记录,service方法体并没有走完,此时,B也向这张表插入相同的记录,B会阻塞。直到A的方法体走完,事物提交,锁才释放,这时B会检测到主键冲突,报错。 (2)A更新数据库的一张表的

锁的理解

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" )的记录。 本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。


推荐阅读
author-avatar
寒时凝结公寓_264
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有