写点什么

事务的自动提交

用户头像
在即
关注
发布于: 2 小时前
事务的自动提交

1.1 事务的自动提交

MySQL 默认是自动提交模式。

如果没有显式开启事务(START TRANSACTION),

每一条 SQL 语句都会自动提交(COMMIT)。

  • 查看事务是否自动提交

mysql> SELECT @@autocommit;

+--------------+

| @@autocommit |

+--------------+

| 1 |

+--------------+

1 row in set (0.00 sec)

关闭自动提交:

SET AUTOCOMMIT = 0;

关闭后:用户需要手动执行提交(COMMIT)操作。

若直接终止 MySQL 会话,MySQL 会自动进行回滚。

1.2 事务的保存点

在回滚事务时,若希望只撤销一部分,可以用保存点来实现。

SAVEPOINT 保存点名;

在设置保存点后,可以将事务回滚到指定保存点。

ROLLBACK TO SAVEPOINT 保存点名;

若不再需要一个保存点,使用如下语句删除。

RELEASE SAVEPOINT 保存点名;

1.21 保存点使用示例

mysql> SELECT name, money FROM sh_user WHERE name = 'Alex';

+------+--------+

| name | money |

+------+--------+

| Alex | 900.00 |

+------+--------+

1 row in set (0.00 sec)

① 开启事务

mysql> START TRANSACTION;

② Alex 扣除 100 元

mysql> UPDATE sh_user SET money = money - 100 WHERE name = 'Alex';

③ 创建保存点 s1

mysql> SAVEPOINT s1; 此时 Alex 为 800 元

④ Alex 再扣除 50 元

mysql> UPDATE sh_user SET money = money - 50 WHERE name = 'Alex';

此时 Alex 为 750 元


# ① 回滚到保存点 s1

mysql> ROLLBACK TO SAVEPOINT s1;

# ② 查询 Alex 的金额

mysql> SELECT name, money FROM sh_user WHERE name = 'Alex';

+------+--------+

| name | money |

+------+--------+

| Alex | 800.00 | 此时恢复为 800 元,事务仍未提交

+------+--------+

1 row in set (0.00 sec)


# ① 回滚事务

mysql> ROLLBACK;

# ② 查看 Alex 的金额

mysql> SELECT name, money FROM sh_user WHERE name = 'a';

+------+--------+

| name | money |

+------+--------+

| Alex | 900.00 |

+------+--------+

1 row in set (0.00 sec)


总结:一个事务中可以创建多个保存点,在提交事务后,事务中的保存点就会被删除。


在回滚到某个保存点后,在该保存点之后创建过的保存点也会消失。

//完

发布于: 2 小时前阅读数: 2
用户头像

在即

关注

还未添加个人签名 2021.02.27 加入

还未添加个人简介

评论

发布
暂无评论
事务的自动提交