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

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

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

sql 复制代码
START TRANSACTION;

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

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

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

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

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

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

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

sql 复制代码
START TRANSACTION;

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

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

COMMIT;

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

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

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

相关推荐
爱吃羊的老虎8 分钟前
【大模型】向量数据库:Chroma、Weaviate、Qdrant
数据库·语言模型
数据大魔方9 分钟前
【期货量化实战】跨期套利策略:价差交易完整指南(TqSdk源码详解)
数据库·python·算法·github·程序员创富
l1t19 分钟前
NineData第三届数据库编程大赛:用一条 SQL 解数独问题我的参赛程序
数据库·人工智能·sql·算法·postgresql·oracle·数独
麦麦大数据1 小时前
J009 美食推荐可视化大数据系统vue+springboot
vue.js·spring boot·mysql·推荐算法·美食·可视化分析·沙箱支付
菜鸟笔记本2 小时前
linux设置定时备份mysql数据
linux·mysql·oracle
千寻技术帮2 小时前
10347_基于Springboot的新疆旅游管理系统
spring boot·mysql·旅游·在线旅游
施嘉伟2 小时前
一次生产环境 SQL 不走索引的排查过程
数据库·sql
踏浪无痕2 小时前
SQLInsight:从JDBC底层到API调用的零侵入SQL监控方案
数据库·后端·开源
小宇的天下2 小时前
Calibre nmDRC Results(19-1)
服务器·数据库·oracle
Web项目开发3 小时前
Mysql创建索引的SQL脚本,复制粘贴即可使用
数据库·sql·mysql