我只在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来回滚操作,看看是否都能正确回滚。