跳到主要内容

三十、MySQL 数据库事务

数据库事务 (Database Transaction) 是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行

事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源

举个例子,A 向 B 转账 100 元,其实整个转账过程就是一个事务,要么转账成功了,A 的账户扣了 100 元,B 的账户增加了 100 元,要么转账失败,A 还是那么多钱,B 还是没钱,如果出现 A 扣了 100 元,B 的账户却没增加 100 元,那是要出问题的,是不?

事务,就是用来做这件事的,用来保证要么转账成功,要么转账失败

MySQL 事务

MySQL 支持事务,但是,但是只有使用 Innodb 数据库引擎的数据库或表才支持事务

事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行

一般来说,事务是必须满足4个条件 ( ACID )

Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

1、 原子性

一组事务,要么成功;要么失败回滚当作什么事都没发生

2、 稳定性

有非法数据 (外键约束之类),事务撤回

3、 隔离性

事务独立运行。一个事务处理后的结果,影响了其它事务,那么其它事务会撤回
事务的100%隔离,需要牺牲速度

4、 可靠性

软、硬件崩溃后,InnoDB 数据表驱动会利用日志文件重构修改
可靠性和高速度不可兼得 innodb_flush_log_at_trx_commit 选项决定什么时候吧事务保存到日志里

MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作

因此要显式地开启一个事务务须使用命令 BEGINSTART TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交

MySQL 事物控制语句

语句说明
BEGIN START TRANSACTION显式地开启一个事务