标准
SQL标准定义的四个隔离级别为:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
- READ UNCOMMITTED称为
浏览访问
(browse access),仅仅针对事务而言的。 - READ COMMITTED称为
游标稳定
(cursorstability)。 - REPEATABLE READ是
2.9999°的隔离
,没有幻读的保护。 - SERIALIZABLE称为
隔离
,或3°的隔离。
默认
Oracle数据库就不支持READ UNCOMMITTED和REPEATABLE READ的事务隔离级别。
SQL和SQL2标准的默认事务隔离级别是SERIALIZABLE。
InnoDB存储引擎默认支持的隔离级别是REPEATABLE READ,但是与标准SQL不同的是,InnoDB存储引擎在REPEATABLE READ事务隔离级别下,使用Next-Key Lock锁的算法,因此避免幻读的产生。已经能完全保证事务的隔离性要求,即达到SQL标准的SERIALIZABLE隔离级别。
隔离级别越低,事务请求的锁越少或保持锁的时间就越短。这也是为什么大多数数据库系统默认的事务隔离级别是READ COMMITTED。
据了解,大部分的用户质疑 SERIALIZABLE 隔离级别带来的性能问题,但是根据JimGray在《Transaction Processing》一书中指出,两者的开销几乎是一样的
,甚至 SERIALIZABLE 可能更优!!!
因此在 InnoDB 存储引擎中选择 REPEATABLE READ 的事务隔离级别并不会有任何性能的损失。同样地,即使使用 READ COMMITTED 的隔离级别,用户也不会得到性能的大幅度提升。
网友评论