数据库事务

四大特性

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 隔离级别

更好的博客:
https://juejin.im/post/6844903670916579336

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容