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 语句提交事务,否则事务操作会失败。

相关推荐
苏瞳儿5 小时前
java对数据库的增删改查
java·数据库·oracle
Greyson18 小时前
Layui表格如何使用第三方插件实现树形展示.txt
jvm·数据库·python
2401_871696528 小时前
mysql行级锁失效的原因排查_检查查询条件与执行计划
jvm·数据库·python
Elastic 中国社区官方博客8 小时前
Elasticsearch:快速近似 ES|QL - 第一部分
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索
Dontla9 小时前
高基数(High Cardinality)问题介绍(Prometheus、高基数字段、低基数字段)
前端·数据库·prometheus
a9511416429 小时前
CSS如何实现元素隐藏不占位_使用display-none完全移除
jvm·数据库·python
SelectDB技术团队10 小时前
SelectDB Enterprise 4.0.5:强化安全与治理,构建企业级实时分析与 AI 数据底座
数据库·人工智能·apache doris
一 乐10 小时前
医院挂号|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·医院挂号管理系统
ego.iblacat10 小时前
Redis 核心概念与部署
数据库·redis·缓存
m0_4939345310 小时前
如何监控AWR数据收集Job_DBA_SCHEDULER_JOBS中的BSLN_MAINTAIN_STATS
jvm·数据库·python