事务就是一组原子行的SQL查询,或者说一个独立的工作单元。事务内的所有语句要么全部执行成功,要么全部执行失败。一个运行良好的事务处理系统必须具备ACID(原子性、一致性、隔离型、持久性)这些标准特征。
原子性:一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。
隔离性:一个事务所做的修改在最终提交以前,对其他事务是不可见的。隔离有四种级别:1.READ UNCOMMITTED (未提交读)在READ UNCOMMITTED 级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为脏读。2.READ COMMITTED (提交读)大多数数据库系统的默认隔离级别都是 READ COMMITTED (但MySQL不是)。READ COMMITTED 满足前面提到的隔离性的简单定义:一个事务开始时,只能看见已经提交的事务所做的修改。3.REPEATABLE READ (可重复读)解决了脏读的问题。该级别保证了在同一个事务中多次读取同样记录的结果是一致的。4.SERIALIZABLE(可串行化)是最高的隔离级别。他通过强制事务串行执行,避免了前面说的幻读的问题。
持久性:一旦事务提交,则其所作的修改就会永久保存到数据库中,此时计时系统崩溃,修改的数据也不会丢失。
MySQL提供了两种事务型的存储引擎:InnoDB 和 NDB Cluster。另外还有一些第三方存储引擎也支持事务,比较知名的包括 XtraDB 和 PBXT。自动提交(AUTOCOMMIT):MySQL默认采用自动提交(AUTOCOMMIT)。也就是说,如果不是显示地开始一个事务,则每个查询都被当作一个事务执行提交操作。在当前连接中可以通过设置AUTOCOMMIT变量来启用或者禁用自动提交模式:SET AUTOCOMMIT = 1,1或者ON表示启用,0或者OFF表示禁用。一些数据定义语言会强制执行COMMIT。
MySQL可以通过执行 SET TRANSACTION ISOLATION LEVEL 命令来设置隔离级别。例:mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED,MySQL能够识别所有的4个ANSI隔离级别,InnoDB 引擎也支持所有的隔离级别。
网友评论