mysql- 锁的种类

1.表锁

方法: lock table 表名 read/write

对表进行read锁的话,当前sessiton对表增删改都会报错,其他session可以查询,增删改需要等待

对表进行write锁的话,当前sessions可以增删改,其他session只能被阻塞

如果要释放表锁用“unlock table 表名”的方式进行 ,另外还可以用show open tables查询所有表锁的信息,也可以通过unlock tables来释放所有锁表信息。

2.行级锁

行级锁其实就是对table中某一行数据进行lock,某一行数据一旦补lock,只有当前session可以进行修改和删除,其他sesstion可以查询,修改和删除会等待,直到当前session事务结束,也就是commit之后才可以进行。

行级锁的方法有如下几种

1.开始事务,对某种where条件的数据进行update或者delete,其他session进行一样where条件update、delete操作会被阻塞,直到当前session commit

2.在select语名增加for update后缀,这样where条件中数据会被锁定,其他session用一样条件加for update都会同样被阻塞,直到当前session commit。

3.mysql事务隔离级别

在mysql中事务隔离级别主要有如下四种

read uncommitted

当前session可以读取到其他session update之后数据,但是这样会带来一个问题,如果其他session rollback了,当前session就会读取了脏数据

read committed

当前session可以读取到其他session update之后并commit之后数据,未commit的话,当前session读取是老数据。这样会带来一个问题,当前session的数据不可以重复读

repeatable read

当前session读取的session开始的数据,selection时感知不到其他session数据修改已commit的变化,对其他session已insert的新数据也读取不到,会带来幻读问题,但是如果update table set age=age-10 where id=1 进行update数据时,会用其他session最新commit后结果进行减10

此级别是mysql默认方式,我们可以用下语看db启用事务隔离级别

show variables like '%isolation%'

serializable

并行级别,此级别效率较低,在实际业务场景中不会使用

在mysql中设定session隔离级别用如下方法进行:

set session transaction isolation level XXXXXXXX

4.间隙锁

如果table user中ID字段值有1-10,30-40 50-60,当前sesion如查update范围8-55区间数据,其他session如果要update id为7或59都会被阻塞,因为mysql会产生一个(1,60]的临键锁,是一个很奇葩的功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值