数据库的隔离级别

在学习hibernate时,了解到一个知识:数据库的隔离级别。

 

隔离级别 是否存在脏数据 是否存在不可重复读 是否存在幻读
Read uncommited Y Y Y
Read commited N Y Y
Repeatable Read N N Y
Serialiazble N N N

解释说明:

Read uncommited:不提交读。顾名思义,在我们还没有提交数据的情况下,就能从数据库读取数据了,如hibernate中在执行了session的flush而没有执行commit时,数据库如果是Read uncommited级别,就能通过select 语句找到flush的数据。脏数据也就是这个意思:没提交就能查找。

Read commited:提交读。和不提交读对立,不存在脏数据。但是在提交数据之后,如果多人同时查找了数据,数据一旦修改,那么查找的数据就会修改。简言之,数据在任何时候允许被修改。这就是不可重复读(理解起来有点别扭)。

Repeatable Read:可重复读。如果数据被某个用户“拿着”,那么这些数据暂时不允许修改。但是系统允许增加此类数据,这就是幻读。

Serialiazble:序列化。这是最严谨的隔离级别,但是不常用。

Mysql数据库默认是Repeatable Read。

 

在Mysql中设置隔离级别:

查看级别:select @@tx_isolation;

设置级别:set transaction isolation level xxx;

你可能感兴趣的:(Hibernate,mysql)