事务的隔离级别
程序员文章站
2022-05-09 15:58:45
...
1.更改级别
mysql> set session transaction isolation level read uncommitted;
mysql> select @@tx_isolation;
+---------------------------------+
| @@tx_isolation |
+---------------------------------+
| READ-UNCOMMITTED |
+---------------------------------+
1 row in set, 1 warning (0.00 sec)
2. 开启事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
3.回滚
mysql> rollback;
Query OK, 0 rows affected (0.04 sec)
4.提交
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
蓝色的是A事务,绿色是的是B事务
READ UNCOMMITTED 级别 脏读、不可重复读、虚读都有可能发生
更换级别
脏读:A事务读取了B事务未提交的数据
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。一个事务读取到了另一个事务提交或未提交后(看数据库的隔离级别)的数据。(update)
幻读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。 (insert)
READ COMMITTED 级别 避免赃读。不可重复读、虚读都有可能发生。(oracle默认的)
避免脏读
不可重复读会发生,而且修改另一个事务未提交的修改时会等待
幻读
REPEATABLE READ 避免赃读、不可重复读。虚读有可能发生。(mysql默认)
避免脏读
避免不可重复读(注意在一个事务内读取另一个事务内提交的数据)。
注意:当重新开启事务时,数据才更新,可以查询到更新的数据。
有可能发生幻读
上一篇: sharding-jdbc事务解读
下一篇: SQL JOIN