事务

事务具有4个特性:

原子性:事务中所有操作视为一个原子,要么完全提交,要么完全回滚

一致性:事务在完成时,使所有数据从一种一致性状态变更为另外一种一致性状态

隔离性:事务与事务隔离,进行事务查看数据所处的状态,要么是被另一个并发事务修改前,要么修改后,通过锁机制实现

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

InnoDB支持事务,引入了UNDO日志和REDO日志

REDO日志:事务执行时需要将执行的事务日志写入到日志文件里,即REDO日志,当每条SQL进行数据库更新操作时,首先将REDO日志写入到缓冲区,当客户端执行COMMIT提交时,日志缓冲区的内容被刷新到磁盘

UNDO日志:与REDO日志想法,UNDO日志主要用于事务异常时的数据回滚,就是复制事务前的数据库内容到UNDO缓冲区,然后在合适的时间内将内容刷新到磁盘,与REDO不同,磁盘上不存在单独的UNDO文件,UNDO被放在表空间对应的.ibd数据文件中

UNDO保证了事务的原子性

REDO保证事务的持久性

数据不需要在事务提交前写入磁盘,而是缓存在内存中

事务控制语句:

开启事务:BEGIN;

事务过程: UPDATE....

提交事务:COMMIT;

MYSQL事务隔离级别:4种

设置语句:SET GLOBAL TRANSACTION ISOLATION LEVEL 未提交读(READ UNCOMMITTED)|提交读(READ COMMITTED)|可重复读(REPEATABLE READ)|可串行化(SERIALIZABLE)

未提交读:可能脏读、不可重复读、幻读

提交读:可能不可重复读、幻读

(默认隔离级别)可重复读:可能幻读

可串行化:事务隔离最高级别,通过强制事务排序,使之不可能冲突,解决幻读问题,通过对每个读的数据行上加锁实现

脏读:事务B读取了事务A未提交的数据

不可重复读:事务A读取了数据,事务B更新并提交了数据,事务A在此读取数据,在一个事务中前后两次读取的结果并不致,导致了不可重复读

幻读:幻读的重点在于新增或者删除,其他类似不可重复读

posted on 2017-08-26 17:07  zawjdbb  阅读(94)  评论(0编辑  收藏  举报

导航