数据库事务( transaction) 是访问并可能操做各类数据项的一个数据库操做序列,这些操做要么所有执行成功,要么所有执行失败,是一个不可分割的工做单位。
sql
通俗地说就是指一组sql语句组成的数据库逻辑处理单元,在这组的sql操做中,要么所有执行成功,要么所有执行失败。数据库
举个简单又经典的例子就是转帐了,事务A中要进行转帐,那么转出的帐号要扣钱,转入的帐号要加钱,这两个操做都必须同时执行成功,为了确保数据的一致性。并发
在Mysql中事务的四大特性主要包含:原子性(Atomicity)、一致性(Consistent)、隔离性(Isalotion)、持久性(Durable),简称为ACID。
性能
Redo/Undo
机制Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。
日志
经过Undo/Redo操做,可实现界面操做过程的撤销和恢复。code
隔离级别解决了哪些问题
cdn
脏读(dirty read):若是一个事务读到了另外一个未提交事务修改过的数据。
blog
不可重复读(non-repeatable read):若是一个事务只能读到另外一个已经提交的事务修改过的数据,而且其余事务每对该数据进行一次修改并提交后,该事务都能查询获得最新值。
事务
幻读(phantom read):若是一个事务先根据某些条件查询出一些记录,以后另外一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另外一个事务插入的记录也读出来。
ci
MySQL中的锁大体能够分为:
MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);
BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;
InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认状况下是采用行级锁。
在四个隔离级别中加锁确定是要消耗性能的,而读未提交是没有加任何锁的,因此对于它来讲也就是没有隔离的效果,因此它的性能也是最好的。