事务
事务是什么
事务就是完成一个业务所需要的一系列sql操作,作为整体运行,要么全部成功,要么全部失败。
事务的四大特性
事务有ACID特性
- 原子性 (Atomicity) ,事务作为整体运行,要么全部成功,要么全部失败。
- 一致性(Consistency), 数据在事务执行前后处于一致状态。
- 隔离性 (Isolation) ,事务与事务之间是相互隔离的,不会相互影响。
- 永久性 (Durability) , 事务一旦提交,数据库的数据就会被永久修改。
事务的操作
启动事务
start transaction;
提交事务
commit;
回滚事务
rollback;
事务的隔离性
事务的并发问题
多个事务同时执行时,事务是相互隔离的,因为隔离等级不同,可能会出现不同的问题。
四个并发问题:
- 脏读
- 不可重复读
- 幻读
-
更新丢失
事务的隔离级别
事务的隔离级别
- read uncommitted 读未提交 ,可以读取为提交的数据,可能会出现幻读。
- read committed 读已提交,只能读取提交的数据。解决了幻读的问题,但可能会出现不可重复读和幻读。
- repeatable read 可重复读,能解决不可重复读的问题。
- serializable 串行化 (序列化) ,让事务排队执行,能解决所有问题
注意:隔离级别越高,并发问题越少,并发效率越低,一般不使用 read uncommitted,serializable。
MySql默认的隔离级别是:repeatable read。
Oracle 默认的隔离级别是 read committed。