业务

1,原子性:指事务包含的所有操作 要么全部成功 要么全部失败
2,一致性:一个事务执行之前和执行之后都必须处于一致状态
3,隔离性:并发 对于任意两个并发的事务T1和T2,在事务T1来看,T2要么在T1开始之前就已经结束了,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发的执行
4,持久性:指一个事务一旦被提交 数据中的数据改变就是永久的

隔离问题

1,脏读:一个事务读到另一个事务未提交的内容(读取未提交的内容)

在该隔离级别 所有事物都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少

2,不可复读:一个事务读到另一个事务已提交的内容(insert)

这是大多数数据库系统的默认隔离级别(Msql不是)。它满足了隔离的简单定义:一个事务只能看到已经提交事务所做的改变

3,虚度(幻读):一个事务读到另一个事务已提交的内容(update)

这是mysql的默认事务隔离级别 它确保同一事物的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致一个棘手的问题:幻读:当用户读取某个数据行时,另一个事务有在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的"幻影"行

4,Serializable (可串行化)

这是最高的隔离界别 它通过强制事务排序,使之不能相互冲突,从而解决幻读问题,简言之,它是在每读的数据行上加上共享锁,在这个级别上,可能导致大量的超时现象和锁竞争

# Hibernate中设置隔离机制
<!-- 配置事务隔离级别
1,读未提交
2,读已提交
4,可重复读
8:串行
-->
<property name="hibernate.connection.isolation">4</property>