mysql 隔离级别 锁_MySql各事务隔离级别及锁问题

聊事务隔离级别和锁问题之前首先得理解事务的隔离级别和共享锁及独占锁的概念:

事务的隔离级别:

脏读

不可重复读

幻读

Read uncommitted

Read committed

×

Repeatable read

×

×

Serializable

×

×

×

独占锁(X锁):独占锁也叫排他锁,是指该锁一次只能被一个线程所持有。如果线程T对数据A加上排他锁后,则其他线程不能再对A加任何类型的锁。获得排它锁的线程既能读数据又能修改数据。

共享锁(S锁):共享锁是指该锁可被多个线程所持有。如果线程T对数据A加上共享锁后,则其他线程只能对A再加共享锁,不能加排它锁。获得共享锁的线程只能读数据,不能修改数据。

1、Read uncommitted

Mysql设置Read uncommitted隔离级别,数据库在修改(update)数据时,使用的是共享锁,所以在修改数据未提交事务时,查询(select)语句是能查到此时修改的数据,如果回滚了修改的数据,则查询到的数据是有问题的,造成了脏读。该隔离级别下查询不加锁,主要涉及到的是共享锁

2、Read committed

数据库在修改数据时,使用的是独占锁,查询数据使用的是共享锁,所以在修改数据时执行查询,查询数据会等待修改数据事务提交后,执行查询并返回提交后的结果

3、Repeatable read

Mysql默认的隔离级别,加锁情况同Read committed,但是Repeatable read在读取数据后,不会立即释放共享锁,而是要等到事务结束后才会释放

4、Serializable

直接对操作的表加表锁,其他事务不能读写该表,效率比较低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值