数据库隔离级别和锁机制

锁机制

共享锁

多个共享锁可以共存,但是已经加了共享锁就不能再加排他锁

排他锁

只要加了排他锁,那么就不能加其他锁

隔离级别

  • 未提交读 Read uncommitted
  • 已提交读 Read committed
  • 可重复度 Repeatable read
  • 串行化 Repeatable read

未提交读

读时不加锁,写时加排他锁
问题:造成脏读,即读取未提交的事务。
问题原因:写数据时有排他锁,但是读数据没有共享锁,所以不会产生共享锁和排他锁的冲突,从而可以读取未提交数据。

已提交读

读时加共享锁,写时加排他锁,但是读取完成就会释放共享锁。
问题:不可重复读,即同一次事务中,多次读取同一数据结果不相同。
问题原因:因为读取后即释放共享锁,此时数据可以被其他事务加排他锁,然后修改,这样原事务再次读取就会发现数据不同了。

可重复读

读时加共享锁,写时加排他锁,且读取完成就不会释放共享锁,直到事务结束释放锁。与已提交读的区别在于,事务结束后才释放共享锁。也是mysql默认的事务隔离级别
问题:幻读。读取数据虽然加锁,但是此时可以插入新数据,而新数据不受之前共享锁的影响,此时再次读取,会发现前后数据不一致。同不可重复读的区别在于,幻读主要时由于插入或删除新数据导致,或者说幻读发生在不同的行,而不可重复读发生在同一行。
问题原因:新插入的数据,不受之前读取数据共享锁的影响。

串行化

读时加共享锁,写时加排他锁,不过前3个都是行级锁,而串行化是表级锁。这样所有的数据表的写入操作,就只能有一个事务,这样可重复读的问题也解决了,保证了串行化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值