1.事务简介
事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。程序和事务是两个不同的概念。一般而言:一段程序中可能包含多个事务。MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理,默认配置下,数据库总是自动提交的。
2.事务特性
事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这四个特性也简称ACID性。
(1)原子性:事务是应用中最小的执行单位,就如原子是自然界最小颗粒,具有不可再分的特征一样。事务是应用中不可再分的最小逻辑执行体。
(2)一致性:事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库中只包含事务成功提交的结果时,数据库处于一致性状态。一致性是通过原子性来保证的。
(3)隔离性:各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。也就是说:并发执行的事务之间不能看到对方的中间状态,并发执行的事务之间不能相互影响。
(4)持续性:持续性也称为持久性,指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中,通常是保存进物理数据库。
隔离性通过Mysql InnoDB锁就可以实现。原子性、一致性、持久性通过数据库的redo和undo来完成。
3.数据库的事务语句组成
3.1 事务语句的组成
(1)一组DML(Data Manipulate Language,即数据操作语言)经过这组DML修改后数据将保持较好的一致性。
(2)一个DDL(Data Definition Language,即数据定义语言)语句。
(3)一个DCL(Data control Language,即数据控制语言)语句。
DDL和DCL语句最多只能有一个,因为DDL和DCL语句都会导致事务立即提交。
当事务所包含的全部数据库操作都成功执行后,应该提交(commit)事务,使这些修改永久生效。
3.2 隐式提交的SQL语句
以下这些SQL语句会产生一个隐式的提交操作,即执行完这些语句后,会有一个隐式的COMMIT操作。
(1)DDL语句:ALTER DATABASE...UPGRADE DATA DIRECTORY NAME、。。。。
(2)用来隐式的修改mysql架构的操作:CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD。
(3)管理语句:ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE 、REPAIR TABLE。
4.事务的提交方式
事务提交有两种方式:显式提交和自动提交。
(1)显式提交:使用commit。
(2)自动提交:执行DDL或DCL,或者程序正常退出。
5.MYSQL的事务处理两种方法
(1)用begin,start transaction,rollback,commit来实现
begin/start transaction 开始一个事务 rollback 事务回滚 commit 事务确认
(2)直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交 set autocommit=1 开启自动提交
来实现事务的处理。
但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!