20.事务简介(gold_axe)

概念

事务: 需要满足ACID是数据库操作

  • Atomictiy 原子性
  • Isolation 隔离性
    各状态的转换不能互相影响, 比如下图 是最低的隔离级别 READ UNCOMMITED 未提交读, 就会出错


    20.事务简介(gold_axe)_第1张图片
  • Consistency 一致性
    就是数据库中的数据, 全部发河现实世界中的约束, 比如钱不能有负数, 各账号之间转账, 总钱数不变, 这些主要靠业务代码保证

原子性和隔离性没达到, 会导致一致性达不到
但是 原子性和隔离性 都达到了, 一致性也可能不满足 ,比如钱数为负数

  • Durability 持久性
    如前文所述, 修改了某UE只是写到buffer pool 缓存中, 要等某个时间点 后台线程把脏页刷到磁盘, 如果这段时间内系统崩溃了怎么办?
    持久性要求, 状态转换成功就是成功了, 不能成功后, 因为任何原因, 又把状态还原了

事务的状态

20.事务简介(gold_axe)_第2张图片
  • 部分提交: 内存中完成 , 还没刷到磁盘
  • 终止的: 回滚还原后

如图 只有 提交的中止的 是结束了

事务相关语法

BEGIN;
UPDATE account SET balance = balance - 10 WHERE id = 1; 
UPDATE account SET balance = balance + 10 WHERE id = 2;
COMMIT;

BEGIN;开始事务

可以换成 START TRANSACTION; 更加强大, 因为START TRANSACTION;可以带修饰符 只读/可读写/一致性读

默认每条sql是一个事务

自动提交 autocommit 默认是 ON, 可以关

COMMIT; 提交事务, 提交以后就是成了 , 要保证持久性

程序员主动回滚

没发错错误, 只是想手动回滚, 用ROLLBACK;

BEGIN;
UPDATE account SET balance = balance - 10 WHERE id = 1;
UPDATE account SET balance = balance + 1 WHERE id = 2;
ROLLBACK;

只主动回滚一部分 ROLLBACK TO s1 s1是之前设的保存点

BEGIN;
UPDATE account SET balance = balance - 10 WHERE id = 1;
SAVEPOINT s1;    # 一个保存点
SELECT * FROM account;
+----+--------+---------+
| id | name   | balance |
+----+--------+---------+
|  1 | 狗哥   |       1 |
|  2 | 猫爷   |       2 |
+----+--------+---------+
2 rows in set (0.00 sec)

UPDATE account SET balance = balance + 1 WHERE id = 2; # 更新错了
ROLLBACK TO s1;  #  回滚到保存点s1处
隐式提交

一些语句自带COMMIT;的效果
比如 再开始一个事务BEGIN;会自动把上一个提交
对表结构的修改, 会把没提交的事务提交
批量往数据库中导入数据时, 会把之前没提交的事务提交

你可能感兴趣的:(20.事务简介(gold_axe))