MySQL——InnoDB锁问题(一)

InnoDB和MyISAM最大的不同有两点,(1)、支持事务处理;(2)、采用行级锁;

行级锁与表级锁本省有很大的不同,同时,引入事务处理后,也带来了新的问题。下面详细讲解InnoDB行级锁。

(一)、背景知识;

(1)、事务及其特性。

事务是由一组SQL语句组成的逻辑单元,事务具有以下四个特性。

a、原子性:事务是一个原子操作单元,要么都执行成功,要么都执行失败。

b、一致性:在事务开始和完成时,数据都必须保持一致性状态,这意味着所有相关的数据都必须应用于事务的修改,以保持数据的完整性;事务结束后,所有的内部数据结构都必须是正确的。

c、隔离性:数据库系统提供一定的隔离机制,保证事务不受外部并发操作影响“独立的”执行环境。也就是处理中的中间状态外部都是不可见的。反之亦然。

d、持久性:数据修改完成后,对数据的修改是永久性的,即使系统出现故障,数据依然能够保持。

(2)、并发事务处理带来的问题。

相对串行处理来说,并发事务处理能力大大增加数据库资源的利用率,提高数据库系统事务的吞吐量,从而可以支持更多的用户,但是并发事务处理会带来一些问题。主要如下:

(a)、更新丢失:当两个事务或者多个事务选择同一行,然后基于选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生数据更新丢失。最后的更新覆盖了其他事务所做的更新。

(b)、脏读:一个事务正在对一条数据进行修改,在这个事务完成并提交事务之前,这条记录的数据就处于不一致的状态;这时,另一个事务又来读取这条数据,如果不加控制,第二个事务就会读取到这些“脏”数据。并据此做一定的处理,就会产生未提交的数据依赖关系,这种现象就叫脏读。

(c)、不可重复读:一个事务正在读取某些数据后的某个时间段,再次读取以前读取到的数据,却发现以前读出的数据已经发生了改变或者这些记录已经被删除!这叫不可重复读。

(d)、幻读:一个事务按相同的查询条件重新读取以前检索过的数据,却发现了其他事务插入了满足其查询条件的新数据,这样的现象叫幻读。

(3)、事务隔离级别。

一般事务隔离的方式有两种:a、一种在读取数据之前,对其进行加锁,阻止其他事务对数据进行修改。

    b、不用加任何锁,通过一定的机制生成数据请求时间点的一致性快照,并用这个快照来提供一定级别的一致性读取。从用户的角度来看,好像是数据库可以提供同一数据的多个版本。简称MVCC。

为了解决隔离和并发的矛盾,ISO/ANSI SQL92定义了4个事务隔离级别,每个级别的隔离程度不同。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值