数据库事务

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

事务的四个特性(ACID)

  • 原子性(Atomicity):指事务是一个不可分割的最小工作单位,事务中的操作只有都发生和都不发生两种情况。
  • 一致性(Consistency):事务必须使数据库从一个一致状态变换到另外一个一致状态。
  • 隔离性(Isolation):一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(Durability):一个事务一旦提交成功,它对数据库中数据的改变将是永久性的,接下来的其他操作或故障不应对其有任何影响。

事务的分类

事务分为隐式事务和显式事务两种。

  • 隐式事务:该事务没有明显的开启和结束标记,它们都具有自动提交事务的功能。DML语句(insert、update、delete)就是隐式事务。
  • 显示事务:该事务具有明显的开启和结束标记。使用显式事务的前提是你得先把自动提交事务的功能给禁用。禁用自动提交功能就是设置autocommit变量值为0(0:禁用 1:开启)

事务的并发问题

  • 脏读:读到了脏数据,即无效数据。
  • 不可重复读:是指在数据库访问中,一个事务内的多次相同查询却返回了不同数据。
  • 幻读:指同一个事务内多次查询返回的结果集不一样,比如增加了行记录。

事务的四种隔离级别

  • read uncommitted(读未提交):允许事务读取未被其他事务提交的变更。(脏读、不可重复读和幻读的问题都会出现)。
  • read committed(读已提交):只允许事务读取已经被其他事务提交的变更。(可以避免脏读,但不可重复读和幻读的问题仍然可能出现)
  • repeatable read(可重复读):确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新(update)。(可以避免脏读和不可重复读,但幻读仍然存在)【Mysql默认隔离级别】
  • serializable(串行化):确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作,所有并发问题都可避免,但性能十分低下(因为你不完成就都不可以弄,效率太低)

事务的特性怎么保证

  • 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部执行失败。通过数据库的回滚机制来保证。如果事务执行过程中出现错误,数据库会回滚事务,撤销所有已执行的更改。

  • 一致性(Consistency):在事务开始之前和结束之后,数据库的一致性要得到保证。数据库中的数据在任何时候都必须保持一致,这通常通过业务逻辑和数据库约束来实现。

  • 隔离性(Isolation):各个事务之间相互隔离,事务的操作不会被其他事务干扰。通过设置不同的隔离级别,可以控制事务之间的隔离性。

  • 持久性(Durability):事务一旦提交,数据的更改就应该永久保存,并且不应该受到系统故障的影响。数据库系统通常通过持久化存储和日志来保证这一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊雲浅谈天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值