文章相关视频出处:https://developer.aliyun.com/lesson_1698_13612#_13612
目录
并发事务问题
·脏读:读取到另一个事务的未提交更新数据
·不可重复读:两次读取不一致
·幻读:读到另一事务已提交数据
脏读概念举例
事务1:张三给李四转账100元
事务2:李四查看自己的账户
·t1:事务1:开始事务
·t2:事务1:张三给李四转账100元
·t3:事务2:开始事务
·t4:事务2:李四查看自己的账户,看到账户多出100元(脏读)
·t5:事务2:提交事务
·t6:事务1:回滚事务,回到转账之前的状态
不可重复读概念举例
事务1:酒店查看两次1048号房间状态
事务2:预定1048房间
·t1:事务1:开始事务
·t2:事务1:查看1048号放假状态为空闲
·t3:事务2:开始事务
·t4:事务2:预定1048号房间
·t5:事务2:提交事务
·t6:事务1:再次查看1048号房间状态为使用
·t7:事务1:提交事务
对同一记录的两次查询结果不一致(从控制角度来看,只需锁住满足条件的记录)
幻读概念举例
事务1:对酒店房间预订记录两次统计
事务2:添加一条预定房间记录
·t1:事务1:开始事务
·t2:事务1:统计预定记录100条
·t3:事务2:开始事务
·t4:事务2:添加一条预定房间记录
·t5:事务2:提交事务
·t6:事务1:再次统计预定记录为101条
·t7:事务1:提交事务
对同一表的两次查询不一致(从控制角度来看,要锁住满足条件相似的记录)
事务四大隔离级别
1 Serializable 串行化(基本不用)
·不会出现任何并发问题
·性能最差
2 Repeatable read 可重复读(mysql默认隔离级别)
·防止脏读和不可重复读,不能处理幻读
·性能比 Serializable 好
3 Read committed 读已提交数据(oracle默认隔离级别)
·防止脏读,没有处理不可重复读和幻读
·性能比 Repeatable read好
4 Read uncommitted 读未提交数据(基本不用)
·可能出现任何事务并发问题
·性能最好
select @@tx_isolation查询数据库事务隔离级别
jdbc设置隔离级别connection.setTransactionIsolation(int level)