MySQL 的默認事務隔離級別取決于所使用的存儲引擎和 MySQL 版本,主要情況如下:
可以通過以下命令查看當前會話或全局的事務隔離級別:
SELECT @@session.transaction_isolation;
SELECT @@global.transaction_isolation;
-
READ UNCOMMITTED(讀未提交):允許讀取未提交的事務數(shù)據(jù),可能導致臟讀。
-
READ COMMITTED(讀已提交):只能讀取已提交的數(shù)據(jù),避免臟讀,但可能出現(xiàn)不可重復讀。
-
REPEATABLE READ(可重復讀):保證同一事務中多次讀取結(jié)果一致,避免臟讀和不可重復讀(MySQL 的 InnoDB 還通過間隙鎖避免了幻讀)。
-
SERIALIZABLE(串行化):最高隔離級別,通過強制事務串行執(zhí)行避免所有并發(fā)問題,但性能較低。
如果需要修改隔離級別,可以使用 SET 命令(會話級或全局級),例如:
SET session transaction isolation level read committed;
SET global transaction isolation level repeatable read;