MySQL 的默认事务隔离级别取决于所使用的存储引擎和 MySQL 版本,主要情况如下:
可以通过以下命令查看当前会话或全局的事务隔离级别:
SELECT @@session.transaction_isolation;
SELECT @@global.transaction_isolation;
-
READ UNCOMMITTED(读未提交):允许读取未提交的事务数据,可能导致脏读。
-
READ COMMITTED(读已提交):只能读取已提交的数据,避免脏读,但可能出现不可重复读。
-
REPEATABLE READ(可重复读):保证同一事务中多次读取结果一致,避免脏读和不可重复读(MySQL 的 InnoDB 还通过间隙锁避免了幻读)。
-
SERIALIZABLE(串行化):最高隔离级别,通过强制事务串行执行避免所有并发问题,但性能较低。
如果需要修改隔离级别,可以使用 SET 命令(会话级或全局级),例如:
SET session transaction isolation level read committed;
SET global transaction isolation level repeatable read;