数据库原理与应用 第 9 章 · 第一节
课程 › 第 9 章 › 第一节 章首并发性事务的概念转账事务ACID 版式
第 9 章 数据库并发控制与封锁 · 第一节

并发与事务

数据库并发性的含义,事务的概念、事务语句和四个性质
本 节 知 识 点
  1. 01第 9 章 数据库并发控制与封锁
  2. 02数据库并发性的含义
  3. 03事务的概念和事务语句
  4. 04转账事务
  5. 05事务的四个性质:ACID
01
第 9 章 · 第一节 · 课件第 1、2 页

第 9 章 数据库并发控制与封锁

本章讲多个用户同时操作数据库时,怎样保证数据的一致性。

课件第 1 页

知道更多本章内容

本章六部分:并发性的含义、事务及其性质、并发控制与数据的不一致性、事务的隔离级别、封锁及封锁协议、小结。

02
第 9 章 · 第一节 · 课件第 3 页

数据库并发性的含义

多个用户同时操作数据库,能提高效率,但可能造成数据不一致。

课件第 3 页

分清楚

方式特点
串行一个一个执行,机器常空闲
并行效率高,可能出现不一致
03
第 9 章 · 第一节 · 课件第 4、5、6 页合并重做

事务的概念和事务语句

事务中的操作要么全部完成,要么全部不做。

9.2 事务及其性质课件第 4、5、6 页合并

事务的概念和事务语句

事务是一个不可分割的逻辑工作单元。事务中的操作可以是一个,也可以是多个,这些操作要么全部完成,要么全部不做。
MySQL 的四种事务模式
模式说明
自动提交每条语句自动作为一个事务,是 MySQL 的默认模式
显式用 START TRANSACTION 开始,COMMIT 或 ROLLBACK 结束
隐式关闭自动提交后,语句自动开始事务,写 COMMIT 才提交
分布式一个事务涉及多台服务器,本课程不涉及
事务语句
语句作用
START TRANSACTION开始一个事务
COMMIT提交事务中的全部修改,结束事务
ROLLBACK撤销事务中的全部修改,结束事务
  • SELECT @@autocommit; 查看自动提交,1 表示打开
  • SET autocommit = 0; 关闭自动提交

练一练

MySQL 默认是自动提交模式。执行一条 UPDATE 之后再执行 ROLLBACK,修改会被撤销吗?
  1. A会
  2. B不会
答案 B

自动提交模式下,UPDATE 执行成功就已经提交。要能回滚,先用 START TRANSACTION 开始事务。

实 验

实验 1-1 自动提交模式

实 验

实验 1-2 回滚事务

04
第 9 章 · 第一节 · 课件第 7、8 页合并重做

转账事务

转账的六个操作放在一个事务中完成。

9.2 事务及其性质课件第 7、8 页合并

转账事务

客户 A1 向客户 A2 转账 100 元:从 A1 的账户 account1 转出,转入 A2 的账户 account2。
USE bankaccount;
START TRANSACTION;
SELECT * FROM account;
SELECT R FROM account
  WHERE id = 'account1';
UPDATE account SET R = R - 100
  WHERE id = 'account1';
UPDATE account SET datetime = NOW()
  WHERE id = 'account1';
SELECT R FROM account
  WHERE id = 'account2';
UPDATE account SET R = R + 100
  WHERE id = 'account2';
UPDATE account SET datetime = NOW()
  WHERE id = 'account2';
COMMIT;
转账前的账户表 account
idR
account1500.00
account2900.00
account3900.00
  • R 是余额,datetime 是最近一次操作的时间
  • 读取、转出、写回,再读取、转入、写回,六个操作放在 START TRANSACTION 和 COMMIT 之间,构成一个事务

字符串要用英文单引号括起来,用中文引号会报错 1054。

05
第 9 章 · 第一节 · 课件第 9、10、11、12 页合并重做

事务的四个性质:ACID

原子性、一致性、隔离性、持久性。

9.2 事务及其性质课件第 9、10、11、12 页合并

事务的四个性质:ACID

性质含义在转账事务中
原子性 Atomicity事务中的操作要么全部执行,要么全部不执行转出后发生故障,已转出的 100 元要撤销
一致性 Consistency事务使数据库从一个一致状态转到另一个一致状态转账前后,两个账户的总额都是 1400 元
隔离性 Isolation并发执行的事务之间互不干扰提交前,其他事务看不到转账的中间状态
持久性 Durability事务提交后,对数据的修改是永久的转账提交后,即使系统发生故障,结果也不会丢失
  • 执行 COMMIT 之前发生故障,事务中已做的修改全部撤销
  • 同时还有 account3 向 account2 转账时,两个事务都结束后的结果,应与两个事务先后执行的结果相同

试一试转账进行到一半发生故障

故障发生在
    账户故障发生时系统恢复后

    实 验

    实验 1-5 连接断开时的事务

    保山学院·人工智能教研室·曹鼎鼎