前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3分钟了解数据库事务

3分钟了解数据库事务

作者头像
Edison.Ma
发布2019-08-09 19:45:01
3680
发布2019-08-09 19:45:01
举报
文章被收录于专栏:DotNet Core圈圈

事务是由几个读取和修改数据的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 串行化
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet技术平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档