# 事务的概念
MySQL事务主要用于处理操作量大、复杂度高的数据,在MySQL中只有使用InnoDB存储引擎的数据库或表才支持事务。
# 事务的特性
事务的处理必须满足四个原则,即原子性(A)原则、一致性(C)原则、隔离性(I)原则和持久性(D)原则,简称ACID原则。
原子性(Atomicity):事务必须是原子工作单元,事务中的操作要么全部执行,要么都不执行,不可以只完成部分操作。
一致性(Consistency):事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。例如,银行转账前后的两个账户金额之和应该保持不变。
隔离性(Isolation):系统必须保证事务不受其他并发执行事务的影响,即当多个事务同时运行时,各个事务之间相互隔离,不可互相干扰。
持久性(Durability):一个已完成的事务对数据所做的任何变动,在系统中是永久有效的。
事务的四原则保证了一个事务或者成功提交,或者失败回滚,二者必居其一。
当事务提交成功后,它对数据的修改则是永久有效的;
当事务提交失败时,它对数据的修改则都会恢复到该事务执行前的状态。
# 事务的执行模式
MySQL的事务可以分为两类:隐式事务和显式事务。
## 隐式事务
在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作。隐式事务是一种自动开始、自动结束(确认或回滚)的事务。一条SQL语句就是一个隐式事务。
可以使用SET语句来改变MySQL的自动提交模式
● 禁止自动提交:SET AUTOCOMMIT=0。
● 开启自动提交(默认值):SET AUTOCOMMIT=1。
## 显式事务
显式事务是一种显式地定义事务开始、结束(确认或回滚)的事务。因此,一个显式事务的语句以BEGIN或者START TRANSACTION开始,至COMMIT或者ROLLBACK结束。
● BEGIN或者START TRANSACTION:开始一个事务。
● COMMIT:事务确认。
● ROLLBACK:事务回滚。
实例:定义一个事务:向student表中插入一条学生记录,再向score表中插入一条该学生的成绩记录,最后提交该事务。
BEGIN; # 开始事务 INSERT student(id,sNo,sName,sex) values (1,'110','张三','男'); INSERT score(sId,cId,grade) values(1,1,89); COMMIT; # 提交事务