欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

理解MySQL事务的 "一致性"--作为约束的一致性

最编程 2024-04-23 14:49:35
...

从数据库的角度来看,它只关心transcation是否符合定义好的规则,如果符合规则,那么就是符合一致性的。

那么这些规则是什么?它可以是约束,可以是CASCADE(在父表上update/delete记录时,同步update/delete掉子表的匹配记录),也可以是trigger。亦或者是它们的组合。

用商品库存的例子来说。当库存>=1时表示有商品,此时可以售卖。库存=0表示没有商品不能售卖。根据我们朴素的生活经验,库存不能小于0

因此,我们的数据库对商品数量进行约束,使其数量大于等于0。当库存=0时,倘若还执行update good_table set good_number=good_number-1语句,数据库会拒绝执行,因为这破坏了“一致性”。

从数据库的角度来说,它认为的一致性就是如此。但是,对于业务上的逻辑,数据库并不知晓,它也不会关注。比如,两个用户同时在某一时刻对库存减一,导致某个用户的减库存操作被另一个用户覆盖(经常发生的超卖问题就是如此,比如前两天到处都能看到的名为“秒杀飞天茅台超卖”的文章)。数据库并不能抵御这种错误的发生。

这就是我马上要讲的,一致性是一种目的。

推荐阅读