トランザクションのネスト

(8.0.22)
https://www.wakuwakubank.com/posts/203-mysql-transaction-nest/

トランザクションのネストをサポートしていない
2つ目のstart transactionでコミットされる

drop table tab1;
create table tab1(col1 int);

select * from tab1;

start transaction;
insert into tab1 values(1);
start transaction;

select * from tab1;

 

 

(19c)

トランザクションのネストをサポートしていない

(13)

トランザクションのネストをサポートしていない
2つ目のstart transactionを実行すると「WARNING: there is already a transaction in progress」となり、無視される

drop table tab1;
create table tab1(col1 int);

select * from tab1;

start transaction;
insert into tab1 values(1);
start transaction;
insert into tab1 values(2);
commit;

select * from tab1;

(2019)

トランザクションのネストをサポートしている
ネストの深さと同じ数のcommitが必要
rollbackするとネストレベルに関係なく全トランザクションロールバックされる


drop table tab1;
create table tab1(col1 int);

select * from tab1;

select @@trancount;
begin transaction;
select @@trancount;
insert into tab1 values(1);
begin transaction;
select @@trancount;
insert into tab1 values(2);
begin transaction;
select @@trancount;
insert into tab1 values(3);
commit;
select @@trancount;
commit;
select @@trancount;
commit;
select @@trancount;

select * from tab1;

select @@trancount;
begin transaction;
select @@trancount;
insert into tab1 values(1);
begin transaction;
select @@trancount;
insert into tab1 values(2);
begin transaction;
select @@trancount;
insert into tab1 values(3);
rollback;
select @@trancount;