mysql传播属性_数据库-事务隔离级别和事务的传播属性

1、事务概念

现在的很多软件都是多用户,多应用,多线程的,对同一个表可能同时有很多人在用,为保持数据的一致性,所以提出了事务的概念。

比如A要给B转1000块钱,那么要做两步Update操作:a、从A账户减1000块钱;b、给B账户加1000块钱;

a、b两个操作应该作为一个整体来执行,要么都成功,要么都失败,否则会出现比较尴尬的情况:“A账户减了1000,但B账户没加钱” ;

(注:MySql数据库只有InnoDB引擎支持事务)

2、事务特性

原子性、一致性、隔离性、持久性,这四个属性通常称为ACID特性。

2.1、原子性(atomicity)

举个栗子

转账:张三给李四转账100元。第一步:张三扣100,第二步:李四加100,第三步:记录一条100转账流水。

如果任何一步没有成功,那整体回滚,张三没扣钱,李四也没多钱,库中也没有生成流水记录。这就是原子性的体现。

2.2、一致性(consistency)

举个栗子

转账:张三给李四转账100元。第一步:张三扣100,第二步:李四加10(逻辑错误),第三步:记录一条100转账流水。

上面三步都成功了,这是原子性的体现,但第二步:李四只加了10元,导致了数据的最终不一致,这就是一致性的体现。

现实中的例子,往往不是这么简单,如某商品进行抢购时,库存为100,抢购过程中事务都没问题,但因为设计缺陷导致产生了101个订单,这就是典型的数据不一致了。

2.3、隔离性(isolation)

主要是指:各个事务之间的数据改变是否相互可见、怎样可见。

详见 ”3、事务隔离级别“一节。

2.4、持久性(durability)    举个栗子

转账:张三给李四转账100元。第一步:张三扣100,第二步:李四加100,第三步:记录一条100转账流水。

这三个步骤修改的数据将永久保存到数据库中,此时就算数据库关闭、或重启,数据也不会丢失。

3、事务隔离级别

3.1、事务分为四种隔离级别:

1、读未提交(Read Uncommited):最低级别的一种状态,什么控制都不做,一个事务可以读到任何事务未提交的数据,相当于没有隔离控制。

2、读已提交(Read Commited):单从字面上可以理解了,就是一个事务中只能读到其他事务已提交的数据修改状态。

3、可重复读(Repeatable):在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。可以解决脏读、不可重复读。

4、串行化(Serializable):事务串行化执行,即一个执行完,才能执行下一个,排着队一个一个地执行,这样就没有并发导致的同时读、写同一份数据的安全性问题了,隔离级别最高,但牺牲了系统的性能。

下面以转账的业务场景,来说明一下以上四个隔离级别

  业务场景:张三银行卡余额500元,李四给张三转账100元,并通知张三时时查看一下自己银行卡余额;cb4e5db886d869cd5fd2003cb2636d42.png

3、可重复读

待上图。。。

4、串行化

待上图。。。

4、事务的传播属性

待续。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值