事务相关实验
观察默认情况下,innodb的事务情况
- 我们先看一下默认事务隔离级别是什么,使用
select @@transaction_isolation
命令
> select @@transaction_isolation
@@transaction_isolation|
-----------------------+
REPEATABLE-READ |
我们看到默认的隔离级别是 可重复读,那就是在一个事务中,读到的数据应该是一样的。
- 我们先开启一个事务A,并查询 student 表的记录
> start transaction
0 row(s) modified.
> select * from student
id|name|
--+----+
1|张三 |
3|李四 |
2 row(s) fetched.
- 我们在另一个session中开启一个事务B,并写入一条记录
> start transaction
0 row(s) modified.
> insert into student values (10,'王五')
1 row(s) modified.
- 回到事务A,我们再查一次,还是2条记录
> select * from student
id|name|
--+----+
1|张三 |
3|李四 |
2 row(s) fetched.
- 提交事务B,让记录正式写入
> commit
0 row(s) modified.
- 回到事务A,再查一次,还是2条记录
> select * from student
id|name|
--+----+
1|张三 |
3|李四 |
2 row(s) fetched.
- 提交事务A,再查一次,这次变成3行了
> commit
0 row(s) modified.
> select * from student
id|name|
--+----+
1|张三 |
3|李四 |
10|王五 |
3 row(s) fetched.
小结:在默认的情况下,MySQL事务的隔离级别是 REPEATABLE-READ,可重复读。也就是说在事务内,多次读取,会获取到一样的数据,哪怕有别的事务对数据进行了操作并提交,并不影响原来已开启的事务。
我发现 在事务中使用truncate去删除数据的时候,rollback是不生效的。一定要小心