当前位置: 首页 > article >正文

MySQL——事务与存储过程(一)事务管理(2)事务的提交

        现实生活中,许多操作都是需要用户确认的,例如在删除一个文档时,当选择删除时,会弹出一个提示对话框,包含两个按钮“确定”和“取消”,如果单击“确定”按钮该文档才会删除。同理,在数据库中,有些命令的使用也是需要被确认的,例如事务中的操作就需要用户确认,当用户确认提交后,事务中的操作才会执行成功,这个过程就是手动提交的过程,接下来针对事务的提交进行详细的讲解。

        为了说明事务的提交方式为手动提交,接下来,在前面的基础上进行操作,这时的a账户有 900 元钱,b账户有 1100 元钱,开启一个事务,使用 UPDATE 语句实现由 b账户向a账户转 100元钱的转账功能,具体语句如下:

START TRANSACTION;

UPDATE account SET money=money+100 WHERE name='a';

UPDATE account SET money=money-100 WHERE name='b';

        上述语句执行成功后,可以使用 SELECT 语句来查询 account 表中的余额,查询结果如下:

mysql> SELECT * FROM account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | a    |  1000 |
|  2 | b    |  1000 |
+----+------+-------+
2 rows in set (0.01 sec)

        从上述结果可以看出,在事务中实现了转账功能。此时,退出数据库然后重新登录,并查询数据库中各账户的余额信息,查询结果如下:

mysql> SELECT * FROM account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | a    |   900 |
|  2 | b    |  1100 |
+----+------+-------+
2 rows in set (0.00 sec)

        从上述结果可以看出,事务中的转账操作没有成功,这是因为在事务中转账成功后还没有提交事务就退出数据库了,由于事务中的语句不能自动提交,因此当前的操作。被自动取消了。接下来再次执行上述语句,然后使用 commit 语句来提交事务,具体语句如下:

START TRANSACTION;

UPDATE account SET money=money+100 WHERE name='a';

UPDATE account SET money=money-100 WHERE name='b';

COMMIT;

        上述语句执行成功后,退出数据库然后再重新登录,使用 SELECT 语句查询数据库中各账户的余额信息,查询结果如下:

mysql> SELECT * FROM account;
+----+------+-------+
| id | name | money |
+----+------+-------+
|  1 | a    |  1000 |
|  2 | b    |  1000 |
+----+------+-------+
2 rows in set (0.00 sec)

        从上述结果可以看出,事务中的转账操作成功了。需要注意的是,由于事务中的操作都是手动提交的,因此在操作完事务时,一定要使用 COMMIT 语句提交事务,否则事务操作会失败。


http://www.kler.cn/a/286274.html

相关文章:

  • 【gRPC-gateway】option定义规则及HttpBody响应
  • 前端学习-事件委托(三十)
  • java求职学习day23
  • 【汽车电子架构】AutoSAR从放弃到入门专栏导读
  • 数据结构-Stack和栈
  • 网站快速收录:提高页面加载速度的重要性
  • 商圣集团:数字创新,引领智慧生活新篇章
  • IM即时通讯软件,企业即时通讯系统就选WorkPlus
  • Unet改进17:添加ShuffleAttention||减少冗余计算和同时存储访问
  • 布偶猫应该怎么喂?希喂、交响乐金罐、尾巴生活彩虹泥适合布偶猫吗?
  • 将vue项目打包为安卓软件
  • 二元分类逻辑回归python代码实现
  • 【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能
  • 【最全最详细】RPC与HTTP的区别
  • 信息学奥赛一本通:友好城市
  • 【bug记录6】css 写animation时,Safari浏览器最后一帧部分样式闪回
  • Adobe Acrobat Reader的高级功能详解
  • linux文件——用户缓冲区——概念深度探索、IO模拟实现
  • 【QNX+Android虚拟化方案】108 - emac0-phy 与 emac1-switch 双网卡兼容 方案实现
  • 【TiDB原理与实战详解】4、DM 迁移和TiCDC数据同步~学不会? 不存在的!
  • 推荐10个开源且实用的大模型
  • ComfyUI上手使用记录
  • 本地部署一个WordPress博客结合内网穿透实现异地远程访问本地站点
  • 【Mysql】面试官问Mybatis分页查询比较慢时你怎么优化?
  • 自然语言处理-词向量转换
  • ssrf进阶绕过思路与特殊玩法汇总