数据库四大事务特性

本文深入探讨了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,并详细阐述了不同事务隔离级别下可能出现的问题,如脏读、不可重复读和幻读。此外,还介绍了如何设置和操作事务,以及各个隔离级别的适用场景和影响。事务管理对于确保数据库的一致性和稳定性至关重要。
摘要由CSDN通过智能技术生成
A:原子性(Atomic),一个事务作为一个最小执行单元,里面的sql要么全部执行要么全部失败或者回滚
C:一致性(Consistency),在一致性状态下,所有事务对一个数据的读取结果都是相同的,例:张三给李四转账100元,其他事务要么看到张三还没给李四转账的状态,要么张三已经给李四转账成功张三少100李四多100,而在张三少100李四的100没有加上的中间状态是不可见的
I:隔离性(Isolation)重点,多个事务并发执行时,一个事务执行不应该影响其他事务的执行
D:持久性(Durability),一个事务的提交应该永久的保存在数据库中,当系统发生故障时需要确保已提交的更新不能发生丢失
事务隔离级别:
  • 查询当前数据库事务隔离级别

    • 在这里插入图片描述
  • 事务并发的问题

    • 脏读:

      • 事务b读到了事务a中已经修改但未提交的结果,这违背了一致性的条件,中间如果事务a有多步骤或者事务a回滚了,事情就大条了
      • 隔离级别read uncommitted 会出现
      • 隔离级别read committed 及以下可以避免
    • 不可重复读

      • 在事务b中几次读取了同一条数据的内容,事务a在事务b一次事务的时间提交了多次对该数据的修改,造成事务b读取到了结果不一致的内容
      • 隔离级别read committed 及以上会出现
      • 隔离级别 repeatable read 及以下可以避免
    • 幻读

      • 在事务b修改数据前查询要修改的数据为3条,但是另一个事务a新增或者删除了3条中范围内的数据,在事务b执行修改sql后返回修改的数据结果不是3条数据,造成修改多了或者少修改了,感觉就像发生了幻觉…
      • 隔离级别 repeatable read 及以上会出现
      • 隔离级别 serializable 可以避免
  • 隔离等级:

    • 1.read uncommitted:

      • 可以读取另一个事务中已修改但未提交的数据
    • 2.read committed

      • 解决脏读的问题
      • 相比第一条只能读取到另一个事务中已提交的数据
      • 可以避免脏读出现
    • 3.repeatable read

      • 解决可重复读及以上问题
      • 相比以上,可以保证在当前事务中多次读取到的相同行数据结果集相同
      • 可以解决不可重复读的问题
    • 4.serializable

      • 解决幻读及以上的问题
      • 串行事务,执行效率过低

事务的显式操作:

  • 查询当前事务隔离级别

    • select @@tx_isolation;
  • 开启一个事务

    • start transaction;
  • 提交一个事务

    • commit;
  • 回滚一个事务

    • rollback;
  • 设置事务的隔离级别

    • set sesstion transaction isolation level {隔离等级}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值