关于数据库事务隔断

关于数据库事务隔断
先创建表,有一张表MAN,id以及name。

  1. 读未提交
    读未提交,顾名思义,读到了别的事务未提交的数据。比如有a事务修改了id=1的数据的name值,但是a事务并没有提交。此时b事务直接就读取到了a事务修改的内容。此种隔断相当没有。不能防止“脏读,不可重复度,幻读”的任意一种。
  2. 读提交
    读提交,就是只能读到别的事务提交过的数据。就读未提交的例子来讲,a事务修改了id=1的name值,未提交,那么b事务是不会查询到id=1的数据的name值发生了变化,这就是读提交的好处,也是最基本的事务保证,也是oracle和sqlserver采用的事务隔断,有效防止了“脏读”。但是读提交不能防止“不可重复度”。

脏读就是读取到别的事务未提交的数据。

不可重复读是什么意思呢,我们举一个比上一个例子稍微复杂一点的例子。b事务先查询了id=1的数据的name值,紧接着a事务把此值修改了后提交,然后在紧接着b事务又一次查询了id=1的数据,发现name值被改了,不一样了!!!b事务懵了,发生了什么!!

  1. 可重复读—不可看到别的事务对已有记录的更新。
    可重复读,看名字就知道是专门为了防止不可重复读这种事情发生的。b事务先查询了id=1的数据的name值,紧接着a事务把此值修改了,然后在紧接着b事务又一次查询了id=1的数据,那么这个值依然是上次查询到的值。他的原理是innodb在b事务查询时会给到一个版本号,a事务提交后版本号会更新,b再次查询还是查到他的版本号的东西,所以不会改变。这也是MySQL默认的事务隔断。但是不能防止“幻读”。

幻读是啥呢。举个例子,b事务查询id<10的数据,紧接着a事务删除了id=1的这一条数据,提交。那么b事务再次查询id<10的数据结果就和之前不一样。

  1. 序列化
    排排坐,大家挨个来,谁先创建的事务,谁先提交,来的迟的就等着。这样可以避免任何问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值