请选择 进入手机版 | 继续访问电脑版

Mysql数据库事务 一致性的理解

[复制链接]
科达工艺 发表于 2020-12-31 18:56:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
对于MySQL数据库一致性的明白

事务的产生

首先,我们需要搞清楚为什么会出现事务.
  Transactions are not a law of nature; they were created with a purpose, namely to simplify the programming model for applications accessing a database. By using transactions, the application is free to ignore certain potential error scenarios and concurrency issues, because the database takes care of them instead (we call these safety guarantees).
这段文字大体寄义就是,事务的产生,实在是为了当应用程序访问数据库的时候,事务可以或许简化我们的编程模型,不需要我们去思量各种各样的潜在错误和并发问题.可以想一下当我们使用事务时,要么提交,要么回滚,我们不会去思量网络异常了,服务器宕机了,同时更改一个数据怎么办对吧?因此事务本质上是为了应用层服务的.而不是伴随着数据库系统天生就有的
事务的四大特性

事务就是一组原子性的SQL操纵大概一个独立的工作单位,事务内的语句要么全部执行乐成,要么全部执行失败。
事务是指对系统举行的一组操纵,为了包管系统的完整性,事务具有ACID特性,具体如下:
原子性(Atomic)
一个事务包罗多个操纵,这些操纵要么全部执行,要么全都不执行
实现事务的原子性,是基于日志的Redo/Undo机制
一致性(Consistency)
一致性是指事务使得系统从一个一致的状态转换到另一个一致状态。 事务的一致性决定了一个系统设计和实现的复杂度,也导致了事务的不同隔离级别。
隔离性(Isolation)
隔离性偏重指事务之间相互隔离,不受影响,这个与事务设置的隔离级别有密切的关系。
恒久性(Durability)
事务提交后,对系统的影响是永久的。
简单明白一致性
看到网上有文章说,事务的AID是数据库的特征,也就是依赖数据库的具体实现。而唯独这个C,实际上它依赖于应用层,也就是依赖于开发者。
这里的一致性,是指数据从一种正确的状态,跳转到另一种正确的状态。什么是正确的状态?这就涉及到数据库库表设计以及应用层代码逻辑。拿最简单的转账来说明:
  账户A转1000到账户B
应用逻辑上的正确性:
1.账户A和账户B在此次事务执行前后(不思量其他事务对AB账号的操纵),账户余额总和的一致性;
2.A转账的金额,必须小于等于自己的账户余额,即事务提交时,A的账户余额不能为负数(可以通过数据库约束,包管账户jine的字段值大于等于0)。
数据库设计上的正确性:
1.账户余额字段,大概在设计的时候,存在数值巨细的约束,那么在事务提交时,B的账户余额不能超出这个范围

简单明白:转账过程中,如果未满足以上的任意一项,那么为包管事务的一致性,数据库操纵失败,事务回滚,回到最初的正确状态
此中,事务的一致性决定了一个系统设计和实现的复杂度,导致了事务的不同隔离级别;在事务的并发的时候,隔离性设计的脏读、幻读等等。
想要相识更多更详细的,可以从下面的传送门去看下:
1.知乎上对事务四大特性明白
2.数据库事务和锁的口试文

来源:https://blog.csdn.net/beyond_1990/article/details/111942564
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )