0%

MySql 锁概念

##一 乐观锁
用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。

1、数据库表设计
三个字段,分别是id,value、version

1
select id,value,version from TABLE where id=#{id}

2、每次更新表中的value字段时,为了防止发生冲突,需要这样操作

1
2
3
update TABLE
set value=2,version=version+1
where id=#{id} and version=#{version};

##二 悲观锁
共享锁和排它锁是悲观锁的不同的实现
#####2.1 共享锁
共享锁指的就是对于多个不同的事务,对同一个资源共享同一个锁。相当于对于同一把门,它拥有多个钥匙一样。
在执行语句后面加上lock in share mode就代表对某些资源加上共享锁了。
#####2.2 排它锁
排它锁与共享锁相对应,就是指对于多个不同的事务,对同一个资源只能有一把锁。
与共享锁类型,在需要执行的语句后面加上for update就可以了

##三 行锁
行锁又分共享锁和排他锁,由字面意思理解,就是给某一行加上锁,也就是一条记录加上锁。
#####3.1 共享锁
在执行语句后面加上lock in share mode就代表对某些资源加上共享锁了。
#####3.2 排它锁
在需要执行的语句后面加上for update就可以了

四 表锁

只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

五 死锁

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去