数据库:事务:ACID属性,隔离级别以及异常情况

定义

事务:事务是一个操作序列,这些操作要么都做,要么都不做,是一个不可分割的单位,是数据库环境中的逻辑工作单位,事务是为了保证数据完整性。

事务不能嵌套
事务的结束
1.正常提交commit,或者回滚rollback;
2.自动提交,一般情况下关闭,效率低
3.用户关闭会话之后,会自动提交事务
4.系统崩溃或者断电之后会回滚事务,即将数据恢复到上一个状态

事务的ACID属性

A原子性

表示不可分割,一个操作集合要么全部操作成功,要么操作失败,不可以从中间做切分。

C一致性

一致性代表了底层数据库的完整性。最终是为了保证数据的一致性,当经过N多个操作之后,数据的状态不会发生改变。
从一个一致性状态到另一个一致性状态,也就是数据不可以发生错乱。

I隔离性

各个事务之间相互不会产生影响。(隔离级别)
严格的隔离性会导致效率降低,在某些情况下为了提高程序的执行效率,会降低程序的隔离级别。

隔离级别以及异常情况

读未提交

读未提交,也叫未提交读,该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据,而未提交的数据可能会发生回滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读。

读已提交

读已提交,也叫提交读,该隔离级别的事务能读取到已经提交事务的数据,因此它不会有脏读问题。但由于在事务的执行中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,这种现象叫做不可重复读。

可重复读

可重复读,MySQL 默认的事务隔离级别。可重复读可以解决“不可重复读”的问题,但还存在幻读的问题。所谓的幻读指的是,在同一事务的不同时间使用相同 SQL 查询时,会产生不同的结果。例如,一个 SELECT 被执行了两次,但是第二次返回了第一次没有返回的一行,那么这一行就是一个“幻像”行。

注意:幻读和不可重复读的侧重点是不同的,不可重复读侧重于数据修改,两次读取到的同一行数据不一样;而幻读侧重于添加或删除,两次查询返回的数据行数不同。

序列化

序列化,事务最高隔离级别,它会强制事务排序,使之不会发生冲突,从而解决了脏读、不可重复读和幻读问题,但因为执行效率低,所以真正使用的场景并不多。

不可重复读针对的是值的不同,幻读指的是数据条数的不同。

隔离级别异常情况异常情况异常情况
读未提交脏读幻读不可重复读
读已提交幻读不可重复读
可重复读幻读
系列化

D持久性

所有数据的修改都必须要持久化到存储介质中,不会因为应用程序的关闭而导致数据丢失

四个属性中最重要的是C一致性,其他属性都是为了保证数据的一致性!

 锁的机制:
 为了解决在并发访问的时候,数据不一致的问题,需要给数据加锁
 加锁的同时需要考虑《粒度》的问题:
     操作的对象
        数据库
        表
        行
 一般情况下,锁的粒度越小,效率越高,粒度越大,效率越低 
        在实际的工作环境中,大部分的操作都是行级锁  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值