MySQL/MariaDB数据库的事务和隔离级别
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.事务概述
1>.事务Transactions
一组原子性的SQL语句,或一个独立工作单元。
2>.事务日志
由于直接对源表进行修改当服务器突然掉电可能会导致源表数据被损坏,因此可以将修改先记录事务信息,后根据事务日志信息再对源表实现undo,redo等故障恢复功能
redo:
将事务日志中已经commit的事务进行复现操作,即对源表进行修改。
undo:
将事务日志中未commit的事务进行rollback(回滚,撤销)操作,这些操作将不会对源表进行修改。
3>.ACID特性
A:
atomicity原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚。
C:
consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态。
I:
Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见;隔离有多种隔离级别,实现并发。
D:
durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中。
4>.Transaction生命周期
二.事务隔离级别概述
1>.事务隔离级别
从上至下更加严格: READ UNCOMMITTED
可读取到未提交数据,产生脏读 READ COMMITTED
可读取到提交数据,但未提交数据不可读,产生不可重复读,即可读取到多个提交数据,导致每次读取数据不一致。此为ORACLE数据库默认级别。 REPEATABLE READ
可重复读,多次读取数据都一致,产生幻读,即读取过程中,即使有其它提交的事务修改数据,仍只能读取到未修改前的旧数据。此为MySQL默认设置 SERIALIZABILE
可串行化,未提交的读事务阻塞修改事务,或者未提交的修改事务阻塞读事务。导致并发性能差
2>.MVCC
多版本并发控制,和事务级别相关。
3>.指定事务隔离级别
MariaDB [yinzhengjie]> SHOW VARIABLES LIKE 'tx_isolation'; #查看默认的事务隔离级别 +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | tx_isolation | REPEATABLE-READ | +---------------+-----------------+ row in set (0.00 sec) MariaDB [yinzhengjie]>