Hibernate之事务并发处理
1、 ReadUncommited(未提交读):没有提交就可以读取到数据(发出了Insert,但没有commit就可以读取到。)很少用
2、 ReadCommited(提交读):只有提交后才可以读,常用,
3、 RepeatableRead(可重复读):mysql默认级别, 必需提交才能见到,读取数据时数据被锁住。
4、 Serialiazble(序列化读):最高隔离级别,串型的,你操作完了,我才可以操作,并发性特别不好,
隔离级别
是否存在脏读
是否存在不可重复读
是否存在幻读
Read Uncommitted(未提交读)
Y
Y
Y
Read Commited(提交读)
N
Y(可采用悲观锁解决)
Y
Repeatable Read(可重复读)
N
N
Y
Serialiazble(序列化读)
脏读:没有提交就可以读取到数据称为脏读
不可重复读:再重复读一次,数据与你上的不一样。称不可重复读。
幻读:在查询某一条件的数据,开始查询的后,别人又加入或删除些数据,再读取时与原来的数据不一样了。
1、 Mysql查看数据库隔离级别:
方法:select@@tx_isolation;
2、 Mysql数据库修改隔离级别:
方法:set transactionisolation level 隔离级别名称;
例如:修改为未提交读:settransaction isolation level read uncommitted;
ACID即:事务的原子性、一致性、独立性及持久性
事务的原子性:是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成.
事务的一致性:是指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.
事务的独立性:是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致.
事务的持久性:是指事务运行成功以后,就系统的更新是永久的.不会无缘无故的回滚.
1、第一类丢失更新(Lost Update)
时间