能受到很大的限制。离级别的选择取决于实际的业务需求(安全与性能的权衡),如果不是金融、电
信等事务级别要求很高的业务,完全可以设置成 transaction_isolation=READ-COMMITTED。
2. Repeatable-read: 这是 MySQL 的 InnoDB 引擎默认的隔离级别,它阻止查询的任何行被
其他事务更改。因此,阻塞不可重复读,而不是幻读。也就是说在可重复读中,可能会出现幻读。重
复读使用一种中等严格的锁定策略,以便事务中的所有查询都能看到来自相同快照(即事务启动时的
数据)的数据。当拥有该级别的事务执行 UPDATE ... WHERE, DELETE ... WHERE, SELECT ... FOR
UPDATE 和 LOCK IN SHARE MODE 操作时,其他事务可能需要等待。
3. Read-Committed-推荐: 事务无法看到来自其他事务的未提交数据,但可以看到当前事务启
动后另一个事务提交的数据。当拥有这种级别的事务执行 UPDATE ... WHERE or DELETE ... WHERE
操作时,其他事务可能需要等待。但是该事务可以执行 SELECT ... FOR UPDATE, and LOCK IN
SHARE MODE 操作,其他事务不需要等待。
4. 串行化(SERIALIZABLE)-极力不推荐,串行化隔离级别是最高的隔离级别,它使用了最保
守的锁策略。它阻止任何其他事务插入或更改此事务读取的数据,直到该事务完成。简单的来说,就
是一个事务一个事务的来执行,显然性能会很低。在这种隔离级别下,一个事务中的相同查询可以反
复执行,每次查询结果是一样的。从当前事务开始执行,任何更改另一个事务提交的数据的尝试都会
导致当前事务等待(阻塞)。这是 SQL 标准指定的默认隔离级别(注意不是 MySQL)。在实践中,
这种严格程度是很少需要的。
5. 读未提交(READ-UNCOMMITTED)-它是最低的隔离级别,虽然性能最高,但也不推荐
6. 它会读取到其他事务修改尚未提交的数据,使用此隔离级别就需要非常小心,认识到这种级
别下的查询结果可能不一致或不可复制,这取决于其他事务同时在做什么。通常,具有此隔离级别的
事务只执行查询,而不执行插入、更新或删除操作。