20.事务简介(gold_axe)

2019-08-22  本文已影响0人  胖达_4b7e

概念

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

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

事务的状态

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

事务相关语法

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;会自动把上一个提交
对表结构的修改, 会把没提交的事务提交
批量往数据库中导入数据时, 会把之前没提交的事务提交

上一篇 下一篇

猜你喜欢

热点阅读