计算机网络/计算机科学与应用/系统/运维/开发

MySQl事务

# 事务的概念

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; # 提交事务



无论人生上到哪一层台阶,阶下有人在仰望你,阶上亦有人在俯视你,你抬头自卑,低头自得,唯有平视,才能看见真实的自己。

评论

^