登录
首页 >  数据库 >  MySQL

在数据库事务中更新多个表数据时,某些表不支持事务会发生什么?

来源:SegmentFault

时间:2023-02-24 17:18:23 254浏览 收藏

数据库小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《在数据库事务中更新多个表数据时,某些表不支持事务会发生什么?》带大家来了解一下在数据库事务中更新多个表数据时,某些表不支持事务会发生什么?,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!

首先,我只在Mysql中做了测试,其它数据库各位读者如果有兴趣可以自己试试。

1. 创建测试数据

首先新建三张表:user、company、school。我们知道InnoDB引擎是支持事务的,而MyISAM引擎不支持事务,因此,在这里,我使用InnoDB作为user和school两个表的引擎,而使用MyISAM作为company的引擎。三个表结构很简单,数据类型什么的我就不放出来了,把表数据列在下面。

user表(InnoDB):

id name age
1 小明 18
2 小李 19
3 小张 20

company表(MyISAM):

id name age
1 小明的公司 小明的公司地址
2 小李的公司 小李的公司地址
3 小张的公司 小张的公司地址

school表(InnoDB):

id name age
1 小明的学校 小明的学校地址
2 小李的学校 小李的学校地址
3 小张的学校 小张的学校地址

2. 执行sql

我们执行如下sql:

BEGIN;
UPDATE user set age = '22' where id = 1;
UPDATE company set address = '小明的第二家公司地址' where id = 1;
UPDATE school set address = '小明的中学地址' where id = 1;
ROLLBACK;

上面的sql首先通过BEGIN启动一个事务,然后将user表中id为1的数据中age字段的值改为22,再将company表中id为1的数据中address字段的值改为‘小明的第二家公司’,第三条语句是将school表中id为1的数据中address字段的值改为‘小明的中学地址’,最后我们并不执行COMMIT来保存更改,而是使用ROLLBACK来回滚操作,看看是否都能正确回滚。

最后的执行结果,由于company表使用了不支持事务的MyISAM引擎,所以,上述语句对company表数据的操作被真正的执行了,也就是说,company表中第一条数据中“小明的公司地址”被改成了“小明的第二家公司地址”,而其它两个表的数据没有发生任何变化。

3. 总结

我们在平时的工作中,如果涉及到数据库事务操作,一定要对库和表的性质特性了解清楚,以防一些不支持事务的库和表,影响了事务操作的原子性。

如果你有任何问题或建议,可以扫描下方二维码或者微信搜索[phpjiagoushier],关注我的微信公众号[PHP架构],与我交流互动。

图片描述

好了,本文到此结束,带大家了解了《在数据库事务中更新多个表数据时,某些表不支持事务会发生什么?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表