[MySQL]事务和ACID原则

本文通过生动的例子介绍了MySQL事务的概念及ACID特性:原子性确保操作全成或全败;一致性保证数据状态从一个一致状态转换到另一个一致状态;隔离性确保并发执行的事务之间互不影响;持久性保证一旦事务提交,其结果将永久保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【MySQL事务&事务的ACID】

什么是事务?

书面解释:事务是一组原子性的SQL查询,或者说是一个独立的工作单元。事务中的所有操作要么全部执行成功,要么全部执行失败。

生活实例:LOL买皮肤。假设你有7000点券,一款皮肤6000点券,然后你点击了购买,皮肤到了你的账号,同时你的点券被减少了6000。

这个过程中全部过程需要统一执行结果,要么执行成功,要么执行失败!试想你在买皮肤的过程中,点券减少了6000,皮肤却没有到达你的账号,那你肯定是1万个不乐意。那假如你的点券没有减少,皮肤却到了你的账号,你当然是10万个乐意了,但是腾讯肯定不乐意了!所以说为了保证双方都开心,这个过程的执行结果必须要一致才行哈!

首先你的点券要被扣除,同时皮肤到你的账号中。假如这个过程中出了任何故障,你的点券都应该还是7000,而且皮肤不应该到达你的账号中。这就是一个原子性的操作了。

那OK,皮肤购买完了,点券也扣除了!假如过两天你登陆你的账号,突然发现皮肤没了,你前两天购买的皮肤没有了~Oh,My God~心里1W个草泥马飞奔而过,接着你就气愤的去找客服去了!这种情况就是说你的这个事务没有做到一个数据保障。有可能是腾讯的数据库宕机了,数据丢失了,这种情况是不应该出现的!~~

通过以上实例,我们似乎能感觉到一个事务好像有那么一点特点,或者说它是有一定原则的。首先,从事务的介绍中,我们可以得到一个原子性(atomicity),理解就是要么全部执行成功,要么全部执行失败,否则就可能造成实例中的那种双方不开心。接着呢?我么能明显感觉到一种特性,就是一致性(consistency),这个怎么理解呢?你看啊,你账号中有7000点券,最后变成了1款价值6000点券的皮肤加上你账号中剩余的1000点券,即7000 = 一款皮肤(6000) + 1000,也就是价值上等价了,点券没有凭空消失,皮肤也没有凭空出现。在实例的最后展现的就是一个持久性(durability)原则,也就是说你的交易完成了,这个数据就应该永远存在,按理说不应该出现实例最后那种情况。还有一种原则就隔离性(isolation),这个体会应该不是很深刻,这个特性就是说,当你在购买的过程中,这时你的点券已经被扣除,但是皮肤还没有到你的账号,假设你在另一个地点还能登陆你的账号,并查看你的点券,通常情况你应该看到的还是7000点券。就是说,这个原子性的操作没有被全部执行完成并提交,这个原子性操作的结果对你来说通常是不可见的。为什么说是通常呢?这个就需要去看一下事务的隔离级别了!~~

好,最后我们再来回顾一下事务的原则:
- 原子性(atomicity)
- 一致性(consistency)
- 隔离性(isolation)
- 持久性(durability)

这就是ACID原则了,你记住了吗?没记住的话就赶快再看一遍吧!~~

本文转自:https://www.boboidea.com/blog/2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值