hibernate之控制并发访问(ANSI事务隔离性级别)
ANSI事务隔离性级别
标准的隔离性级别由ANSI SQL标准定义,但是它们不是SQL数据库特有的。JTA也定义了完全相同的隔离性级别,稍后你将用这些级别声明想要的事务隔离性。隔离性级别的增加带来了更高成本以及严重的性能退化和可伸缩性:
----------------------------
1.允许脏读取但不允许丢失更新的系统,据说要在读取未提交的隔离性中操作。如果一个未提交事务已经写到一个行,另一个事务就不可能再写到这个行。但任何事务都可以读取任何行。这个隔离性级别可以在数据库管理系统中通过专门的写锁实现。(读取未提交隔离性级别)
----------
2.允许不可重复读取但不允许脏读取的系统,据说要实现读取提交的事务隔离性。这可以用共享的读锁和专门的写锁来实现。读取事务不会阻塞其他事务访问行。但是未提交的写事务阻塞了所有其他的事务访问该行。(读取提交隔离性级别)
----------
3.在可重复读取隔离性模式中操作的系统既不允许不可重复读取,也不允许脏读取。幻读可能发生。读取事务阻塞写事务(但不阻塞其他的读取事务),并且写事务阻塞所有其他的事务。(可重复读取隔离性级别)
----------
4.可序列化提供最严格的事务隔离性。这个隔离性级别模拟连续的事务执行,好像事务是连续地一个接一个地执行,而不是并发地执行。序列化不可能只用低级锁实现。一定有一些其他的机制,防止新插入的行变成对于已经执行会返回行的查询的事务可见。(可序列化隔离性级别)
----------------------------
锁系统在DBMS中具体如何实现很不相同:每个供应商都有不同的策略。你应该查阅DBMS文档,找出更多有关锁系统的信息,如何逐步加强锁(例如从低级别到页面,到整张表),以及每个隔离性级别对于系统性能和可伸缩性有什么影响。
----------
sqlserver 与 oracle都是默认读取提交隔离级别!!!!!!!!!!!!!!