MySQL的事务管理

java分享会

分享人:程凯

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

当多个用户访问同一份数据时,一个用户再更改数据的过程中可能有其他用户同时发起更改请求,为保证数据的更新从一个一致性状态变更为另一个一致性状态,这时就有必要引入事物的概念。MySQL提供了多种存储引擎支持事务,支持事务的存储引擎有InnoDB和BDB。

2.知识剖析

1.事务的4种特性:

(1)原子性:事务中所有的操作视为一个原子单元,即对于事务所进行的数据修改等操作只能是完全提交或者是完全回滚。

(2)一致性:事务完成时,必须使用所有的数据从一种一致性状态变更为良一中一致性状态,所有的变更都必须应用于事务的修改,以确保数据的完整性。

(3)隔离性:一个事务中操作语句所做的修改必须与其他事务所做的修改相隔离。

(4)持久性:事务完成之后,所做的修改是对数据的影响是永久的,即使是系统重启或者出现系统故障数据依然可以恢复

2.REDO日志:

事务执行时需要将执行的事务日志写入到日志文件中,对应的文件为REDO日志

3.UNDO日志

与REDO日志相反,UNDO日志主要用于事务异常时的数据回滚。

3.常见问题

1.事务控制语句

2.事务的几种隔离级别

4.解决方案

1.事务控制语句

2.事务的几种隔离级别

(1)READ-UNCOMMITTED(读取未提交内容)(脏读)

(2)READ-COMMITTED(读取提交内容):满足了格力的简单定义:一个事务从开始到提交前所做的任何改都是不可见的,事务之只能看见已提交事务所做的改变

(3)REPEATEABLE-READ(可重复读):这是MySQL的默认的事务管理级别,能同时保同一个事务的多个实例在并发读数据时,会看到同样的数据行,理论上会导致另一个问题:幻读。

(4)Serializabel(可串行化):这是最高的隔离级别,通过强制事务排序,使之不可能相互冲突,从而解决幻读 的问题。

>

5.编码实战

6.扩展思考

Serilizabel是事务管理最高的级别,为什么不是默认的事务级别?

7.参考文献

百度

8.更多讨论

InnoDB的锁机制?

鸣谢

感谢观看,如有出错,恳请指正

BY : 程凯