3分钟了解数据库事务
2018-11-07 15:22 李明成 阅读(714) 评论(1) 编辑 收藏 举报事务是由几个读取和修改数据的sql命令组成的,但是知道commit命令被执行之后,修改操作才被认为是正常的完成。显式事务常以Begin tran语句开头,以commit tran或者rollback tran语句结尾的。
事务具有acid属性
- 原子性(atomicity):原子性指的是每个事务要不提交(commit)要不终止(rollback)。比如现实中的转账
- 一致性(consistency):一致性属性确保事务不允许系统到达一个不准确的逻辑状态-数据必须总是保持逻辑上的正确。及时在发生系统故障时,约束和规则也必须得到承兑。
- 隔离性(isolation):隔离性会将并发事务与其他未完成事务的更新操作分离开。隔离性主要是解决并发事务出现的 脏读、不可重复读、幻读现象,根据自己的业务场景选择对应的隔离级别;
- 持久性(durability):当事务提交以后,数据库的持久性属性就会确保事务的作用持续存在。
事务总是全部支持这四种acid属性的。但是可能会初选一些另外的行为,常叫做‘一致性问题’。他们仅仅可能存在的行为,而用户对于隔离级别的选择决定下列这些行为哪种是被允许的。
Case1
事务A,先执行,处于未提交的状态
事务B,后执行
如果事务B能够读取到(name为lisi)这条记录,事务A就对事务B产生了影响,这个影响叫做“读脏”,读到了未提交事务操作的记录。
Case2
事务A先执行
事务B,后执行,并且提交
事务A,在此执行相同的查询,结果name:zhaosi
这次是已提交事务B对事务A产生的影响,这个影响叫做“不可重复读”(重点为update),一个事务内相同的查询,得到了不同的结果。
Case3
事务A,先执行,1条结果:
事务B,后执行,并且提交;
事务A,在此查询为两条,莫名其妙多出了一条
这次是已提交事务B对事务A产生的影响,这个影响叫做“幻读”。(重点在insert,delete)
为了解决多个事务并发会引发的问题,进行并发控制。数据库提供了四种事务隔离级别供用户选择。
- Read Uncommitted 读未提交
- Read Committed 读已提交
- Repeatable Read 可重复读
- Serializable 串行化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2012-11-07 作业与SSIS包结合
2012-11-07 分享OLAP的时间维度设计语句