MySQL --- 读书笔记 --- 事务
事务概述
事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样就可以保证已提交到数据库的修改不会因为系统崩溃而丢失
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态
事务处理的原则:保证所有事务都作为一个工作单元来执行,当在一个事务中执行多个操作时,要么所有事务都被commit,修改被永久保存下来,要么放弃所有修改,整个事务rollback到最初状态
事务ACID特性
- 原子性(atomicity):是指事务是一个不可分割的工作单元,要们全部提交,要么全部失败回滚,不存在中间状态
- 一致性(consistency):是指事务执行前后,数据从一个
合法状态变换到另一个合法状态,这种状态是语义上的,由业务定义 - 隔离性(isolation):是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是
隔离的,并发执行的各个事务之间不能互相干扰 - 持久性(durability):是指一个事务一旦被提交,它对数据库中数据的改变是
永久性的,接下来其他操作和数据库故障不应对其有影响
四个特性中,A是基础,I是手段,C是约束条件,D是目的
事务状态变迁

事务理论角度分类
- 扁平式事务,所有操作在一个层次,
begin开始,rollback或者commit结束,操作是原子的,要么提交要么回滚 - 链式事务:一个事务由多个子事务链式组成,在提交一个事务时,释放不需要的数据对象,将必要的处理上下文隐式地传给下一个要开始的事务,前一个子事务的提交操作和下一个事务的开始操作合并成一个原子操作,这意味着下一个事务将看到上一个事务的结果,就好像在一个事务中一样。这样,在提交子事务时就可以释放不需要的数据对象,而不必等到整个事务完成后才释放。
- 嵌套事务:是一个层次结构框架,由一个顶层事务控制着各个层次的事务
- 分布式事务:通常是在一个分布式环境下运行的扁平式事务
事务隔离级别
数据并发问题
问题
- 脏写:事务A
修改了另一个未提交事务B所修改过的数据 - 脏读:事务A
读取了另一个未提交事务B所修改过的数据 - 不可重复读:事务A
读取了一个字段,然后事务B修改了这个字段,当事务A再次读取这个字段,发现值被修改了 - 幻读:事务A
读取一个字段,事务B插入一些新数据,事务A再次读取时,表中多了几行记录
相应的隔离级别
READ UNCOMMITTED:读未提交,所有事务都可以看到其他未提交的事务的执行结果,不能避免的情况有脏读、不可重复读、幻读READ COMMITTED:读已提交,一个事务只能看到其他事务已经提交的执行结果,不能避免的情况有不可重复读、幻读REPEATABLE READ:可重复读,重复读取的数据记录,不会被其他事务所影响,不能避免的情况有幻读SERIALIZABLE:可串行化,事务期间,禁止其他事务对该表执行插入、更新和删除操作

浙公网安备 33010602011771号