zoukankan      html  css  js  c++  java
  • MySQL事务中更新多个表数据时,某些表不支持事务会发生什么???

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

    1. 创建测试数据

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

    user表(InnoDB):

    idnameage
    1小明18
    2小李19
    3小张20

    company表(MyISAM):

    idnameage
    1小明的公司小明的公司地址
    2小李的公司小李的公司地址
    3小张的公司小张的公司地址

    school表(InnoDB):

    idnameage
    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. 总结

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

    你的点赞关注是对我最大的支持,求一键三连:分享朋友圈、点赞、在看

    791e33135038345b73a2e972843e6a1d.png

  • 相关阅读:
    深入浅出讲解 ElasticSearch的安装与使用【建议收藏】
    win10 elasticsearch安装IK中文分词器
    elasticsearch 使用过程中经常遇到的问题
    在给elasticsearch安装head插件时,npm install 版本不匹配
    elasticsearch.bat闪退的解决方案
    图文详解| Node.js安装及环境配置之Windows篇
    面试必备:秒杀场景九个细节
    vagrant 安装中遇到的问题
    2021 年上海市成人高校考试招生工作规定
    成考专科数学模拟试题一及答案
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15847745.html
Copyright © 2011-2022 走看看