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
- 解决幻读及以上的问题
- 串行事务,执行效率过低
- 1.read uncommitted:
事务的显式操作:
- 查询当前事务隔离级别
- select @@tx_isolation;
- 开启一个事务
- start transaction;
- 提交一个事务
- commit;
- 回滚一个事务
- rollback;
- 设置事务的隔离级别
- set sesstion transaction isolation level {隔离等级}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/61482.html