位置: 编程技术 - 正文

SQL Transcation的一些总结分享

编辑:rootadmin
1.1.1 摘要 相信大家对于SQL Transcation再熟悉不过,它确保了数据库的数据一致性和安全性,尤其在对数据执行增删时,如果发生异常和错误它就会触发事务回滚,从而确保了我们数据的一致性和安全性,下面我们将通过分四部分介绍事件(Transcation)。 1.1.2 正文 首先让我们通过一个具体的例子介绍Transcation的使用,假如我们的数据库中有一个表UserInfo,它包含三个字段分别为:UserID(自增)、UserName (nvarchar)和LuckyNumber (tinyint),如下图所示: 图1 UserInfo表 UserInfo表的sql代码如下: 接着我们要把数据插入到表UserInfo中,这里使用一个存储过程把数据插入到该表中,存储过程SPAddDataToUserInfo的定义如下: 现在我们已经定义了一个存储过程,接着让我们执行该存储过程。

图2执行存储过程的消息 通过上图我们知道在执行存储过程中发生了异常,而且是由于值“”数据超出了tinyint的范围产生的,现在让我们看一下数据插入的情况。

图3 UserInfo表中数据 我们发现只插入了两行数据,而第三行数据没有成功插入,但为了确保数据完整性,我们要把数据全部插入或全部不插入,这时我们可以考虑使用Transcation来确保数据完整性和安全性。 接着让我们修改一下存储过程SPAddDataToUserInfo,在存储过程中添加Transcation。 现在我们再执行一次存储过程看一下是否全部不插入到表中。

图4 UserInfo表中数据 我们发现结果和没有添加Transcation处理一样,数据依然插入到表中。这究竟是什么原因呢?也许细心的你已经发现了,我们没有添加事务回滚——ROLLBACK。 但我们究竟要在哪里添加事务回滚(ROLLBACK)呢?或更具体地说:“究竟什么时候我们要触发事务回滚(ROLLBACK)呢”? 由于我们数据插入失败是因为插入过程发生了异常情况,那么我们就要捕获异常和处理异常,那就是TRY/CATCH的设计了,好让我们继续完善我们的存储过程吧。 现在我们给存储过程添加了异常处理机制TRY/CATCH(注意:SQLSERVER 或之后的版本才支持TRY/CATCH),接下来让我们再执行一次存储过程。 图5 UserInfo表中数据 看上去我们已经把问题的解决了,我们知道存储过程可以内嵌存储过程或函数,所以我们把上面的存储过程SPAddDataToUserInfo内嵌到存储过程SPMultiDataToUserInfo中,SPMultiDataToUserInfo的定义如下: 我们知道存储过程SPAddDataToUserInfo会发生异常,它会回滚事务(ROLLBACK),但SPMultiDataToUserInfo是发生回滚还是继续插入数据呢?

图6 执行存储过程消息 图7 UserInfo表中数据 在插入的过程发生了异常,检查UserInfo表数据并没有插入表中,这符合我们设计的意图,但我们发现异常不仅仅是产生于插入的数据超出了数值的范围,还包含事务计数异常。 由于定义了两个存储过程,而且SPAddDataToUserInfo内嵌在SPMultiDataToUserInfo中,在执行这两个存储过程中,它们都发生了异常并且进行事务回滚(因为User为空)。 由于插入的数据超出了数值的范围的异常是我们特意引起的,而事务计数异常这是预期之外的异常。 接下来让我们看一下究竟是什么原因引起了该异常,这里我们通过输出Transactions计数来查看问题所在。 上面我们通过输出事务的计数(@@TRANCOUNT)来查看在事务回滚时,事务计数器的变化。 图8 存储过程执行消息 通过上图我们发现在执行SPMultiDataToUserInfo和SPAddDataToUserInfo时,事务计数器分别加1,当遇到SPAddDataToUserInfo中的异常时,事务回滚事务计算器置零。 当执行SPMultiDataToUserInfo中的事务时,由于事务计算器(@@TRANCOUNT)已经置零,导致抛出异常,现在我们明白了导致事务计数异常的原因,所以我们在进行事务回滚之前必须判断事务计算器(@@TRANCOUNT)是否为0,如果为0就不回滚事务。 现在我们增加了事务计数器的判断,当计数器为0时,不进行事务回滚,这样就没有了之前事务计数器异常了。 图9 存储过程执行消息 现在对于事务我们有了进一步的了解,而且把以上的事务定义成为一个日常通用的模板,如下给出了一个基本的Transaction模板。 1.1.3 总结 事务是作为单个逻辑工作单元执行的一系列操作。可以是一条SQL语句也可以是多条SQL语句。 事务具有四个特性 原子性:不可分隔、成则具成、败则具败。 一致性:事务在完成时,必须使所有的数据都保持一致状态 隔离性:独立的执行互不干扰。由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。 持久性:务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。 应用程序主要通过指定事务启动和结束的时间来控制事务。 启动事务:使用 API 函数和 Transact-SQL 语句,可以按显式、自动提交或隐式的方式来启动事务。 结束事务:您可以使用 COMMIT(成功) 或 ROLLBACK(失败) 语句,或者通过 API 函数来结束事务。 事务模式分为:显示事务模式、隐式事务模式、自动事务模式。在SQL常用的是显示模式。 创建事务的原则: 尽可能使事务保持简短很重要,当事务启动后,数据库管理系统 (DBMS) 必须在事务结束之前保留很多资源、以保证事务的正确安全执行。 特别是在大量并发的系统中, 保持事务简短以减少并发 资源锁定争夺,将先得更为重要。 1、事务处理,禁止与用户交互,在事务开始前完成用户输入。 2、在浏览数据时,尽量不要打开事务 3、尽可能使事务保持简短。 4、考虑为只读查询使用快照隔离,以减少阻塞。 5、灵活地使用更低的事务隔离级别。 6、灵活地使用更低的游标并发选项,例如开放式并发选项。 7、在事务中尽量使访问的数据量最小。

推荐整理分享SQL Transcation的一些总结分享,希望有所帮助,仅作参考,欢迎阅读内容。

SQL Transcation的一些总结分享

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL的Join使用图解教程 对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点

SQL中JOIN和UNION区别、用法及示例介绍 1.JOIN和UNION区别join是两张表做交连后里面条件相同的部分记录产生一个记录集,union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集

关于SQL中CTE(公用表表达式)(Common Table Expression)的总结 一.WITHAS的含义WITHAS短语,也叫做子查询部分(subqueryfactoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,

标签: SQL Transcation的一些总结分享

本文链接地址:https://www.jiuchutong.com/biancheng/348165.html 转载请保留说明!

上一篇:SQL Join的一些总结(实例)(sql中的join)

下一篇:SQL的Join使用图解教程(sql,join)

  • 支付国外佣金代扣代缴增值税
  • 软件产品即征即退备案资料
  • 专用发票只能公对公吗
  • 现金余额本月金额和本年累计金额怎么填
  • 小规模纳税人每个季度超过了30万怎么办
  • 工会账户谁来管理
  • 回购股份进行股权激励会计分录
  • 采暖费报销发票
  • 报销交通费的会计怎么做
  • 劳动局仲裁支付的补偿怎么做账?
  • 企业收取客户利润违法吗
  • 去年漏记一笔银行付款怎么办
  • 补计提以前年度增值税
  • 通用机打发票没写税额
  • 中国人民银行保险公司
  • 普通合伙企业分配利润
  • 通行费进项税额抵扣金额填在哪里?
  • 帮客户采购会计分录
  • 个人出租房屋给公司可以开专票吗
  • 委托加工业务流程图
  • 退休人员再就业受伤算工伤吗
  • 进项转出税务处理
  • 物流公司运费账务处理
  • linux deepin怎么样
  • 2020最新win10密钥
  • 公司购入二手设备 如何开具发票
  • macbook无限输入z
  • 家装行业如何确认收入
  • win10电脑时间改了又跳回去
  • php字符串型数据的定义方式
  • 财政应返还额度是什么意思?
  • 龟背竹的养殖方法和管理
  • 税前可扣除的税费
  • 销售使用过的机器设备如何缴纳增值税
  • Laravel 5.5 的自定义验证对象/类示例代码详解
  • 机票报销属于什么费
  • 利息资本化怎么计算
  • 全局平均池化(GAP)层
  • ChatGPT中国电话不能注册
  • 如何计算公司需增加的营运资金
  • 固定资金是什么科目
  • 电梯销售公司利润
  • 季度销售额未超过30万元 季度中间
  • 变更法人需要什么流程
  • 工程运维预缴增值税税率
  • 收到抵扣发票怎么做分录
  • 收取水电费计入什么科目
  • 公司广告费用咨询费都应当作为管理费用对还是错
  • 去年的电费能查到吗
  • mysql,if
  • 小型企业需要给员工买社保吗
  • 图书发行税率
  • 财务人员如何爱岗敬业
  • 小微企业流转税优惠政策
  • 如何做应收账款分析
  • 管理人员的奖金可以索赔吗
  • 出租车费用分录
  • 培训费做什么会计分录
  • 会计记账的方法是如何发展的
  • 怎么查看445端口有没有关闭
  • win8搜索程序和文件在哪里
  • Ubuntu10.10 Zend FrameWork配置方法及helloworld显示
  • linux中磁盘分区
  • vim显示中文乱码
  • newsupd.exe - newsupd是什么进程 有什么用
  • 密钥升级win10专业版有问题吗
  • win 10 build
  • cocos2dx ccbreader内存泄露
  • Unity3D游戏开发培训课程大纲
  • 不通过肾门的结构都有什么
  • Node.js中的全局变量有哪些
  • jquery图片效果
  • 陕西省税务局机关服务中心
  • 税务人的形象
  • 深圳国家税务总局
  • 持有上海市居住证一年以上是什么意思
  • 汽车车船税怎么交
  • 全国砂石供应紧缺
  • 湖南电子税务申报
  • 车间租金计入什么会计科目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设