一、事务
一个事务由一系列操作组成,这些操作必须全部执行,而不能仅执行一部分。
如果事务失败,所有操作就必须全部撤销,效果就和没有执行这些操作一样,不会对之前的数据有任何改动。
二、数据库事务具有ACID特性
- A:Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行;
- C:Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了100;
- I:Isolation,隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离;
- D:Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。
三、实例 1.隐式事务
对于单条SQL语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务。
-- 第一步:将id=1的A账户余额减去100
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
2. 显式事务
要手动把多条SQL语句作为一个事务执行,
- 使用
BEGIN
开启一个事务, - 使用
COMMIT
提交一个事务,
这种事务被称为显式事务
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
3. 主动回滚事务
有些时候,我们希望主动让事务失败,这时,可以用ROLLBACK
回滚事务,整个事务会失败:
BEGIN;
-- 从id=1的账户给id=2的账户转账100元
-- 第一步:将id=1的A账户余额减去100
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 第二步:将id=2的B账户余额加上100
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
ROLLBACK;
https://www.liaoxuefeng.com/wiki/1177760294764384/1179611198786848