事务的特性

事务的特性

如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:

原子性(Atomicity)

一次事务中如果进行多个数据操作的业务,最终的结果要么所有操作都成功,要么所有操作都失败。

一致性(Consistency)

一致性就是数据表中的数据更新要求合乎逻辑的特性,满足了原子性不一定满足一致性

 例如:A转账给B,转了100元,最终的结果要求:A的账户减少
 100,B的账户增加100,不能出现A减少了,但是B没增加的。

隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如同时操作一条数据,数据库为每一个用户开启的事务(为该数据上锁,其他事务在上一个事务操作完毕之前是不能操作数据的),不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

事务的隔离性

  • 事务的隔离性:
  • 当多个线程(多个用户或者多个事务)都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个事务获取数据的准确性。

没有隔离性数据库会出现的几种问题

  • 如果没有隔离性会有以下几种问题出现:

1.更新丢失
如果多个用户操作数据,基于同一个查询结构对表中的记录进行修改,那么后修改的记录将会覆盖前面修改的记录,前面的修改就丢失掉了,这就叫做更新丢失。这是因为系统没有执行任何的锁操作(没有隔离性),因此并发事务并没有被隔离下来。

2.脏读
脏读是指在一个事务处理过程中读取了另一个事务未提交的数据(即将回滚的数据)。

3.不可重复读
一个事务对同一行数据重复读取两次,但是却得到了不同的结果。事务A读取第一个数据后,事务B对其做了修改,当事务A再次读该数据时得到与前一次不同的值。

**解决办法:**如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

  不可重复读和脏读的区别是:脏读诗某一个事务读取了另一个事务              
  未提交的脏数据(即将回滚的数据),而不可重复读则是读取了前
  一事务提交(更新)的数据。

4.虚度(幻读)

同一事务中两次统计一张数据表的数据得到的结果不一致,第二次读会增加一行数据。例如:A事务第一次统计了所有员工的薪资之和为10000,但是事务还没有结束,因为还要读取第二次,但是在此期间事务B向表中增加了一条员工信息,并且薪资是1000,此时事务A第二次再去统计薪资结果是:11000,最终事务A两次统计的结果不一致,这就叫做虚读。

幻读和不可重复读的区别?

* 不可重复读:描述的是一个事务两次读取同一条数据,发现两次读   
 取的数据结果不一致。

* 幻读(虚读):描述的也是一个事务两次统计某张数据表的时
 候,’发现统计的结果不一致。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值