一、四大特性
1、原子性
每个事务都是一个整体不可再拆分
事务中所有sql要么都执行成功、要么都执行失败
2、一致性
事务在执行之前 数据库的状态,与事务执行之后的状态要保持一致
3、隔离性
事务与事务之间不应该相互影响,执行时要保证隔离状态
4、持久性
一旦事务执行成功了,对数据的修改是持久的
二、隔离级别
并发访问产生的问题
- 脏读: 一个事务读取到另一个事务没有提交的数据
- 不可重复读:一个事务中 两次读取的数据不一致
- 幻读:一个事务读取了几行数据,另一个事务并发插入一些数据,在之后的查询中,第一个事务读到了一些原本不存在的数据
1、读取为提交(read uncommitted)
可以防止问题:无
2、读取已提交(read committed)Oracle默认隔离级别
可以防止问题:脏读
3、可重复读(repeatable read)MySQL默认隔离级别
可防止问题:脏读、不可重复读
4、串行化(serializable)
可防止问题:脏读、不可重复读、幻读
隔离级别从小到大安全性越来越高,但是效率越来越低
「查看隔离级别」
select @@tx_isolation; --查看当前隔离级别
「设置隔离级别」
set global transaction isolation level 隔离级别名称; --设置隔离级别