JDBC事务并发产生的问题和事务隔离级别
原子操作使用事务,一组相关的操作。
数据库是事务性的资源,在数据库中所有的操作都与事务相关。JDBC中自动提交是打开的,所以我们感觉不到事务。
1,如果con.setAutoCommit(false);就可以由我们提交。
2, update
insert
delete
3, con.commit();或com.rollback();
1,脏读(dirty read),读取到了没有提交的数据。
2,不可重复读(UnPrpeatable Read),两次读取到了不同的数据,就是要保持在同一时间点上两次读取到的数据相同,不能够使查询数据时进行改变。
3,幻读(phantom),在两次查询同一时间点数据时,数据数量发生改变,要保持在同一时间点上两次读取到的数据相同。
事务隔离级别
TRANSACTION_NONE不使用事务。理论上的,实际没用。
TRANSACTION_READ_UNCOMMITTED 可以读取为提交数据。能脏读,这个级别没用,都不控制。
TRANSACTION_READ_COMMITTED 可以避免脏读,不能够读取没提交的数据,最常用的隔离级别 大部分数据库的默认隔离级别
TRANSACTION_REPEATABLE_READ可以避免脏读,不可重复读取,
TRANSACTION_SERIALIZABLE可以避免脏读,重复读取和幻读,(事务串行化)会降低数据库效率
以上的五个事务隔离级别都是在Connection类中定义的静态常量,使用setTransacti