MySql 事务

事务ACID特性

事务:一组操作要么全部成功,要么全部失败,目的是为了保证数据的最终一致性。

原子性(Atomicity):当前的事务要么同时成功,要么同时失败。原子性由undo log日志来实现。(mysql undo log日志会在后台生成相应的对应数据日志,比如当执行insert语句时会undo log日志生成对于的delete语句,在事务执行失败回滚时会执行该语句。)
一致性(Consistency):使事务的最终目的,由其他3个特性以及业务代码正确逻辑来实现、
隔离性(Isolation):在事务并发执行时,他们的内部操作不能互相干扰。隔离性由mysql的各种锁以及MVCC机制来实现。
持久性(Durability):一旦提交了事务,他对事务的更改应该是永久性的,持久性由redo log日志实现。

事务隔离性

InnoDB引擎中,定义了4种隔离级别,级别越高事务隔离性越好,但性能就越低,而隔离性是由MYSQL的各种锁和MVCC机制来实现的。

  • read uncommit(读未提交):脏读
  • read commit(读已提交):不可重复读 语句级快照
  • repeatable read(可重复读):幻读 事务级快照
  • serializable(串行):解决上面所有问题,包括脏写
    更新丢失或者脏写:当两个或者多个事务选择同一行数据修改,有可能发生更新丢失,即最后更新覆盖了其他事务所作的更新。

脏读:事务A读到事务B已经修改但是没有提交的数据。
不可重复读:事务A内部的相同查询语句在不同时刻读出的结果不一致。
可重复读:事务A每次查询结果一致(在 repeatable read隔离级别下,当事务A进行第一次查询时,数据库生成一个快照,每次查询都是查询快照内容。若此时事务B开启事务进行查询,会生成新的事务B的数据库快照,此时事务A和事务B数据库快照数据可能不相同)。
幻读:事务A读到事务B提交的新增数据

select 查询读取快照读,update、insert、delete使用的是当前写
repeatable read隔离级别中:update之后,会跟新当前事务中关于该条记录的快照,其他记录快照不变;在当前事务中无法查询到另一事务的insert的记录,但是可以如果有其他事务对insert的记录进行update,update之后可以查询到,且当前事务可对该insert记录进行update;delete需要测试。

所以,read uncommit、read commit、repeatable read三种都可能出现更新丢失和脏写,可以通过数据库的update、insert、delete避免(例如update tableName set a = a+1 )。其中read commit还可以通过加版本号解决。

测试隔离级别的方法

set tx_isolation = 'serializable';
//set tx_isolation = 'read-uncommitted' or 'read committed' or 'repeatable-read' or 'serializable';
begin;
//sql语句 ... ... 
select * from account


commit;

相关推荐

  1. Mysql事务

    2024-05-11 18:20:05       56 阅读
  2. MySQL 事务

    2024-05-11 18:20:05       41 阅读
  3. MySQL事务

    2024-05-11 18:20:05       32 阅读
  4. MySQL事务

    2024-05-11 18:20:05       31 阅读
  5. Mysql事务

    2024-05-11 18:20:05       31 阅读

最近更新

  1. MySQL 的 Buffer Pool 的结构及有什么作用

    2024-05-11 18:20:05       0 阅读
  2. 【大模型】解锁语言模型潜能:提示工程的艺术

    2024-05-11 18:20:05       0 阅读
  3. docker run enteypoint怎么样使用呢?

    2024-05-11 18:20:05       1 阅读
  4. kafka中

    kafka中

    2024-05-11 18:20:05      1 阅读
  5. 探索Vue.js:构建高效前端应用的现代框架

    2024-05-11 18:20:05       1 阅读
  6. ffmpeg 获取视频时长的命令及其输出

    2024-05-11 18:20:05       1 阅读
  7. 使用Python绘制甘特图

    2024-05-11 18:20:05       1 阅读
  8. uboot spi nor flash初始化相关的阅读分析(一)

    2024-05-11 18:20:05       1 阅读
  9. 最小生成树(算法篇)

    2024-05-11 18:20:05       1 阅读
  10. K8S集群应用国产信创适配实战经验总结

    2024-05-11 18:20:05       1 阅读
  11. 方程与不等式

    2024-05-11 18:20:05       1 阅读

热门阅读

  1. 设计模式-工厂模式

    2024-05-11 18:20:05       11 阅读
  2. 【element-plus】自动导入 + typescript 提示

    2024-05-11 18:20:05       11 阅读
  3. 设计模式-原型模式

    2024-05-11 18:20:05       10 阅读
  4. 6. path路径绘制:使用path绘制弧线

    2024-05-11 18:20:05       11 阅读
  5. P1443 马的遍历

    2024-05-11 18:20:05       10 阅读
  6. 设计模式:命令模式

    2024-05-11 18:20:05       11 阅读
  7. 利用干扰源模型确定多通道音频信号盲源分离

    2024-05-11 18:20:05       14 阅读