数据库事务之SavePoint
SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子。
语法:
--创建保存点 SAVEPOINT 保存点的名称; --回滚到某个保存点 ROLLBACK [WORK] TO 保存点的名称; --删除保存点 RELEASE SAVEPOINT 保存点名称;
操作演示:
// 开始查询空表 mysql> select * from t_x; Empty set // 开启事务 mysql> begin; Query OK, 0 rows affected (0.01 sec) // 插入第一条数据 mysql> insert into t_x value(1, '1'); Query OK, 1 row affected (0.01 sec) // 设置保存点 mysql> savepoint a1; Query OK, 0 rows affected (0.01 sec) // 此时查询一条数据 mysql> select * from t_x; +----+------+ | id | name | +----+------+ | 1 | 1 | +----+------+ 1 row in set (0.01 sec) // 插入第二条数据 mysql> insert into t_x value(2, '2'); Query OK, 1 row affected (0.01 sec) // 设置保存点2 mysql> savepoint a2; Query OK, 0 rows affected (0.01 sec) // 查询两条数据 mysql> select * from t_x; +----+------+ | id | name | +----+------+ | 1 | 1 | | 2 | 2 | +----+------+ 2 rows in set (0.01 sec) // 插入第三条数据 mysql> insert into t_x value(3, '3'); Query OK, 1 row affected (0.01 sec) // 共三条 mysql> select * from t_x; +----+------+ | id | name | +----+------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | +----+------+ 3 rows in set (0.01 sec) // 回滚到第一个保存点 mysql> rollback to a1; Query OK, 0 rows affected (0.01 sec) // 此时查询,只有第一个保存点时的一条数据 mysql> select * from t_x; +----+------+ | id | name | +----+------+ | 1 | 1 | +----+------+ 1 row in set (0.00 sec) // 尝试回滚到第二个保存点, 出错 mysql> rollback to a2; 1305 - SAVEPOINT a2 does not exist mysql>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2017-03-20 (二)hibernate进阶
2017-03-20 (一)Hibernate初探之——单表映射
2017-03-20 保护心灵窗口——防蓝光软件f.lux