mysql事物的隔离级别:
mysql innodb存储引擎实现SQL标准的4种隔离级别,用来限定事物内外的哪些是可见的,哪些是不可见的,低级别的事物一般支持更高的并发处理,并拥有更低的系统开销。
show variables like ‘tx_isolation’;
±--------------±----------------+
| Variable_name | Value |
±--------------±----------------+
| tx_isolation | REPEATABLE-READ |#这也是默认的隔离级别。
±--------------±----------------+
1 row in set (0.01 sec)
(1)读未提交read uncommitted,RU,在一个事物中可以读取其他事物未提交的数据变化,这种读取其他会话还没提交的事物,叫做脏读。
(2)读已提交(read committed)RC,(我司mysql数据库使用该级别)在一个事物中可以其他事物已经提交的数据变化,也就是不可重复读,允许幻读现象的发生,(oracle默认事物级别)。
(3)可从复读(repetable read) RR,mysql 默认的隔离级别,在其中一个事物中,都可以反复读取到事物刚开始的数据,避免了脏读,不可从复读,胡幻读的现象的发生。
(4)串行(serializable)每次读取都加表级排他锁,会造成innodb的并发能力的下降。大量的锁超时和锁竞争。
修改当前会话隔离级别:
set tx_isolation=0(set tx_isolation=“read-uncommitted”;);
show variables like ‘tx_isolation’;
±--------------±-----------------+
| Variable_name | Value |
±--------------±-----------------+
| tx_isolation | READ-UNCOMMITTED |
±--------------±-----------------+
set tx_isolation=1(set tx_isolation=“read-committed”;);
Query OK, 0 rows affected, 1 warning (0.00 sec)
show variables like ‘tx_isolation’;
±--------------±---------------+
| Variable_name | Value |
±--------------±---------------+
| tx_isolation | READ-COMMITTED |
±--------------±---------------+
set tx_isolation=2;(set tx_isolation=“repeatable-read”;)
show variables like ‘tx_isolation’;
±--------------±----------------+
| Variable_name | Value |
±--------------±----------------+
| tx_isolation | REPEATABLE-READ |
±--------------±----------------+
set tx_isolation=3(set tx_isolation=“SERIALIZABLE”;);
show variables like ‘tx_isolation’;
±--------------±-------------+
| Variable_name | Value |
±--------------±-------------+
| tx_isolation | SERIALIZABLE |
±--------------±-------------+
上述命令改成set global,当前会话不会生效,退出在进入会生效。