Mysql数据库-----不玩情景模拟,直击Mysql事务
- Mysql事务概念
:数据库的事物是指一组sql语句注册的数据库逻辑处理单元
- 特点(ACID):
原子性(Atomicity):在事物的sql操作中,对数据的修改要么全部执行成功,要么全部执行失 败,它是基于日志的Redo/Undo机制。;
一致性(Consistent):一致性是指执行事物前后的状态要一致,可以理解为数据一致性;
隔离性(Isalotion): 指事物的独立性,事物相互隔离,与事物设置的隔离级别有关;
持久性(Durable):指事物提交后,这个事物的状态(对数据的新增、更新)会被持久化到数据库中;
四个特点之间的关系:原子性、隔离性和持久性都是为了保障一致性而存在的,一致性为前者的最终目的。
- ACID的原理
- 原子性基于Redo/Undo机制:将所有数据的更新操作都写入日志;
- Undo log: 记录数据更新前的值;
- Redo log:记录数据块被修改后的值。
- 基于此特性:若数据库执行异常,可通过日志的方式,回滚数据,实现事务的一致性
- 一致性的事务隔离级别:
- 读未提交(READ UNCOMMITTED):此级别有产生脏读(读取到另一个事务未提交的数据)的隐患,一般是针对update的操作有此隐患;
- 读提交 (READ COMMITTED):意如其名,读取已经提交的内容;
- 可重复读 (REPEATABLE READ):解决了不可重复读和脏读的问题,但是有幻读(由于非线程安全,可以读取到后面插入的内容)的隐患,幻读隐患主要是针对insert操作;
- 串行化 (SERIALIZABLE):把事务的执行过程变为顺序执行。。
- 注:四个等级从上至下,隔离等级越来越高,但是由于锁的原因,性能越来越差
- 锁分类:分享锁/读锁(Shared Locks)、排他锁/写锁(Exclusive Locks) 、间隙锁、行锁(Record Locks)、表锁;