四大特性
1、原子性:事务中的操作都是不可分割的,要么全部成功,要么全部失败。
2、一致性:事务执行后,数据库状态与其他业务规则保持一致,如转账业务,无论事务成功与否,两个账号的余额之和是不变的。
3、隔离性:在并发操作中,不同事务之间应该隔离开,使每个并发中的事务不会相互干扰。
4、持久性:一旦事务提交成功,所有数据操作必须持久化到数据库中,提交事务后,数据库马上崩溃,重启时也能通过某种机制恢复。
假如:开启事务后,既没有提交,也没有回滚。它会自动回滚,当然不要这么做。
事务的并发读问题
1、脏读:读取到另一个事务未提交的数据(绝对不允许的)
2、不可重复读:两次读取不一致,对同一条记录两次读取不一致,因为另一事务对该记录做了修改。
3、幻读:读到另一事务已提交的数据。对同一张表两次查询不一致,因为另一事务插入了一条记录。
四大隔离级别
四大隔离级别就是解决事务并发读问题。
1、serializeble(串行化)
- 不会出现任何并发问题,因为它是对同一数据的访问是串行的,非并发访问。
- 性能最差。
2、REPEATABLE READ (可重复读)(mysql默认级别) - 防止脏读和不可重复读
- 性能比serializeble好
3、READ COMMITTED (读已提交数据)(oracle默认级别) - 防止脏读
- 性能比PEPEATABLE READ好
4、READ UNCOMMITTED (读未提交数据) - 可能出现任何的事务并发问题
- 性能最好
查看数据库隔离级别
SELECT @@transaction_isolation;
设置隔离级别
set transaction isolationlevel 隔离级别
网友评论