1.1 事务定义 一次执行多个sql,且其中有写操作,会对原始数据进行修改。 1.2 事务特性 1.2.1 原子性(A) 所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复到事务 开始前的状态,就像这个事务从来没有执行过一样。 1.2.2 一致性(C) 在事务开始和完成时,数据必须保持一致。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性 1.2.3 隔离性(I) 并发访问数据库时,事务与事务之间不会被互相干扰。但是访问相同数据时会存在并发干扰的情况,需要设置事务的隔离 级别来保证数据的准确性 1.2.4 持久性 (D) 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失 1.3 事务的隔离机制 1.3.1 并发带来的问题 1.3.1.1 更新丢失 (两个都改) 例:A、B两个事务同时对同一条数据的某个字段进行++操作。B的读在A的写之前就会出现对字段少加一次的情况 1.3.1.2 脏读 (一个修改一个读) 例:A写、B读,同一条数据的某个字段。在A写操作提交之前B读到的就是脏数据 1.3.1.3 不可重复读(一个读两回前后不一) 例:一个事务内部读了两回发现前后不一致 同一个查询条件,同一个row两次返回结果不一样,另一个事务针对这个row执行了update操作 1.3.1.4 幻读 同一个查询条件,返回的结果不一样。另一个事务针对这个表做了delete或者insert操作 1.3.2 事务的隔离级别 查看事务隔离级别 select @@tx_isolation; 1.3.2.1 读未提交 1.3.2.2 读已提交 防脏读 1.3.2.3 可重复读 防脏读、不可重复度 1.3.2.4 串行化 防脏读、不可重复度、幻读 1.4 事务实现原理 事务的实现是基于数据库的存储引擎,InnoDB引擎默认隔离级别是可重复读 MVCC解决不可重复读问题,间隙锁解决幻读问题 事务隔离性是通过锁来实现 事务的原子性,一致性和持久性都是事务日志来实现的 redo log其实保障的是事务的持久性和一致性 undo log则保障了事务的原子性
1 mysql事务机制
最新推荐文章于 2024-10-01 17:33:05 发布