目录
MySQL事务处理
什么是事务
事务是由一组SQL语句组成的逻辑处理单元。
事务的四大特性
ACID
原子性(Atomicity)
事务是一个原子操作单元,其对数据的修改,要么全部执行,要么全都不执行。
一致性(Consistent)
在事务开始和完成时,数据都必须保持一致状态。
隔离性(Isolation)
数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行,这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
持久性(Durable)
事务完成之后,他对于数据的修改是永久性的,即使出现系统故障也能够保持。
事务举例
多事务执行方式
多请求多操作时应该如何处理:
串行执行
最简单的处理方式,代表同一时间只有一个事务执行,如果有四件事,需要做一个队列,谁先进队列处理谁,一个一个来。
比如,开了一个窗口的银行,然后取票排队处理业务。
特点
- 同一时间只有一个事务执行
- 效率低,无法充分利用资源
交叉并发执行
比如:a客户填表,b客户可以处理业务。b客户处理完,b去填表,a处理业务。
利用任务等待时间,交叉并发执行。
特点
- 多事务交叉运行
- 单处理器的并发方式
同时并发执行
比如:银行开多个窗口,每个窗口都能处理客户的业务,效率最高。
就像计算机多核,就可以处理多个运算。
特点
- 多处理器系统中使用
- 每个处理器处理一个事务
并发执行导致的问题
- 并发势必面临“同读同写”问题;
- “同读同写”导致破坏事务隔离性和数据不一致;
什么是数据不一致
丢失修改(lost update)
丢失修改是指事务1与事务2从数据库中读入同一数据并修改。事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失;
不可重复读(non-repeatable read)
不可重复读是指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次的读取结果。
读“脏数据”(dirty read)
读“脏”数据是指事务1修改某一数据并写回,然后事务2读取该数据。事务1由于某种原因被撤销,数据恢复原值。导致事务2读取的数据为错误数据,也就是“脏数据”。
并发控制
- 对并发操作进行正确正确调度;
- 保证事务的隔离性;
- 保证数据的一致性;