MySQL savepoint-事务测试
首先,同时开启2个数据库连接测试数据库事务。以下分别用Thread1,Thread2代替。
2个线程的执行顺序为:
Thread1 Thread2
1.1
1.2
1.3 1
2.1
2.2
2.3 2
3 3
4.1
4.2 4
5
##prepare test
CREATE TABLE _TRAN(
k INT AUTO_INCREMENT,
first_name varchar(255),
last_name varchar(255),
PRIMARY KEY (k)
)TYPE=INNODB;
[1] thread
## 1.1 select first_name is 'Simon' , will be return null
select * from _tran where first_name='Simon';
## 1.2 start a transaction,and insert a data to table _tran
START TRANSACTION;
INSERT INTO _tran(`first_name`,`last_name`)
values('Simon','Tom');
## 1.3 can find a data form _tran where first_name is 'Simon'
select * from _tran where first_name='Simon';
## 2.2 defind a test for savepoint;
savepoint test;
## 2.2 insert into a data again;
insert into _tran(`first_name`,`last_name`)
values('Simon','Cof');
## 2.3 can find 2 data from _tran where first_name is 'Simon';
select * from _tran where first_name='Simon';
## 3 rollback to savepoint test;
rollback to savepoint test;
## 4.1 find only a row data for _tran where first_name is 'Simon';
select * from _tran where first_name='Simon';
## 4.2 use commit command to commit;
COMMIT;
## 5 find only a row data from _tran where first_name is 'Simon'
select * from _tran where first_name='Simon';
[2] thread
## 1 select first_name is 'Simon', will be return null;
select * from _tran where first_name='Simon';
## 2 return null again 2
select * from _tran where first_name='Simon';
## 3 return null agegin 3
select * from _tran where first_name='Simon';
## 4 find only a row data from _tran where first_name is 'Simon'
select * from _tran where first_name='Simon';