mysql事务隔离级别分为四种:Read Uncommitted 读取未提交内容 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)。
Read Committed 读取提交内容 本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。
Repeatable Read 可重读 在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。
Serializable 可串行化 读操作会隐式获取共享锁,可以保证不同事务间的互斥。
查看当前事务级别:show variables like '%tx_isolation%';
查看全局事务隔离级别:show global variables like '%tx_isolation%';
设置事务的隔离级别:
- set session transaction isolation level read uncommitted;
- set session transaction isolation level read committed;
- set session transaction isolation level REPEATABLE READ;
- set session transaction isolation level SERIALIZABLE;