了解事务
事务是一组有着内在逻辑联系的SQL命令。支持事务的数据库系统要么确认同一个事务里的所有SQL命令,要么把它们当做整体全部放弃。也就是说,事务永远不会只完成一部分。
事务的特征
事务可以由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成。
使用事务可以大大提高数据安全性和执行效率,因为在执行多条SQL命令的过程找那个不必再使用LOCK命令锁定整个数据库表,MySQL目前只支持InnoDB数据库上的事务。
事务必须同时满足4个特征,即所说事务的ACID特征。
1、原子性
原子性是指整个数据库事务是不可分割的工作单位,只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功。
2、一致性
指事务将数据库从一种状态变成另一种一致的状态。在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
3、隔离性
隔离性要求每个读写事务的对象与其他事务的操作对象能相互分离,即该事务提交前对其它事务都不可见,这通常使用锁来实现。
4、持久性
事务一旦提交,奇结果就是永久性的,即使发生死机等故障,数据库也能将数据恢复。
MySQL是否支持事务由存储引擎决定,InnoDB存储引擎支持事务及行级锁。使用事务以前需要确认存储引擎的类型,MyISAM不支持事务,用于只读程序提高性能。
事务的分类
1、扁平事务
扁平事务是事务类型中最简单的一种,而在实际生产环境中,这可能是使用最为繁琐的事务。
2、带有保存点的扁平事务
除了支持扁平事务支持的操作外,允许在事务执行过程中回滚到同一个事务中较早的一个状态,这是因为可能某些事务在执行过程中出现的错误并不会对所有的操作都无效,放弃整个事务不合理的要求,开销也太大。
3、链事务
链事务可视为保存点模式的一个变种。该事务的思想是:在提交一个事务时,释放不需要的数据对象,将必要的处理上下文隐式地传给下一个要开始的事务。
4、嵌套事务
它是一个层次结构框架,有一个顶层事务控制着各个层次的事务,顶层事务之下嵌套的事务被称为自事务,它控制每一个局部的变换。
5、分布式事务
分布式事务通常是一个在分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点。
事务控制语句
在实际操作事务的过程中,需要使用到一系列的事务语句
(START TRANSACTION、COMMIT和ROLLBACK等)
1、开启事务
在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后会马上执行COMMIT操作。因此要显式地开启一个事务必须使用START TRANSACTION 或BEGIN和BEGIN WORK语句,或者执行SET AUTOCOMMIT=0语句,以禁用当前会话的自动提交。
2、提交事务
如果要使用提交事务语句的最简单形式,只需发出COMMIT命令。COMMIT语句会提交事务,并使已对数据库进行的修改成为永久性的。
3、回滚事务
如果要使用回滚事务语句的最简单形式,只需发出ROLLBACK命令。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。同样地,ROLLBACK可以写成ROLLBACK WORK,两者几乎是等价的,其不同之处与COMMIT和COMMIT WORK一样
其它语句
除了常见的开启事务、提交事务和回滚事务语句外,与MySQL事务除了相关的语句还有多个:
1、SAVEPOINT identifier
2、RELEASE SAVEPOINT identifier
3、ROLLBACK TO identifier
4、SET TRANSACTION
SET TRANSACTION 语句用来设置事务的隔离级别。InnoDB存储引擎提供的事务隔离级别包括READ UNCOMMITION