`
cjc
  • 浏览: 659975 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL 事务话题

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>所谓事务,就是一个最基本的工作单元,要么整个事务全部操作完成,要么整个事务就不做操作.这一点非常重要,比如说银行系统中A帐户转帐10,000元给B账户的SQL语句,第一条语句update balance set account=account+10000 where ID='B';第二条语句update balance set account=account-10000 where ID='A';这两个语句写成一个存储过程完成转帐工作是初看是没有问题.但是如果第一条语句顺利执行,而第二条语句执行失败(比如设置了Check约束,不允许account<0,而A账户原account<10,000则会造成执行失败),那么我们B账户多了1万元,而A账户账目没有减少,那这条语句就会给银行造成损失.
这只是一个简单例子,如果银行系统中真存在这样的问题,那么无论对用户还是对银行来说都是不愿意看到的.要避免部分语句执行成功,部分语句执行失败的情况发生,就要用到事务.事务跟踪每一个对数据库的更改,如果所有的SQL语句都执行成功了,那么就commit,完成所有的更改,如果有失败的操作,那么就将整个执行过程rollback,使整个事务对数据库不做任何更改.下面就介绍一下事务的相关知识:
1.管理事务中常用的语句有:begin transaction,commit transaction,rollback transaction,save transaction,@@ERROR,@@TRANSCOUNT.
完整的一个事务的基本语句是:
declare@er1int,@er2int
begintransaction
--……数据库操作
set@er1=@@ERROR--记录上个操作的错误,如果运行成功,那么其值为0
--
……另一个数据库操作
set@er2=@@ERROR--记录第二个操作的错误
if(@er1=0and@er2=0)--两个操作都顺利完成则提交事务
committransaction
else--有操作失败则回滚事务
rollbacktransaction

这是一个简单的事务例句,其他的的事务语句原理相同.
2.事务支持嵌套,嵌套原则和一般的程序嵌套原则相同,commit transaction,rollback transaction针对的是最近的一个未匹配begin transaction.在嵌套的时候最好不要给事务名.另外如果事务A中嵌套了一个事务B,事务B commit,而事务A rollback,那么到底在事务B中执行的修改生效了吗?没有,因为B嵌套在A中,A事务rollback了,所以整个A内的操作全部回滚.总之,只有在最外层事务提交的时候SQL Server才将所有修改写入数据库.
3.Save transaction
这个语句提供一个事务的标记点,让后面的commit或rollback操作标记点后的内容.save transation 和begin transaction 一组,与commit transaction 和rollback transaction进行配对.
比如:
begintransaction
update......1
savetransactionSaved
update......2
rollbacktransactionSaved
committransaction


这个语句运行的结果就是执行了update 1,而update 2没有执行.

以上只是个人的一点认识和见解,若有错误或不当之处希望大家指正.

分享到:
评论

相关推荐

    一个简单的 SQL 学习大纲,旨在帮助你系统地学习 SQL

    最后,在高级话题阶段,你将学习事务和锁、存储过程和触发器、视图、安全性等与 SQL 相关的重要话题。 ### 适用人群: 本学习大纲适用于想要系统地学习 SQL 的初学者和进阶者。如果你是一个对数据库操作感兴趣的...

    程序员的SQL金典.rar

    透彻分析函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值处理、事务、开窗函数等高级技术;通过对实际案例开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容简介 本书主要介绍SQL的语法...

    程序员的SQL金典4-8

    第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  ...

    MySQL找出未提交事务的SQL实例浅析

    很久之前曾经总结过一篇博客“MySQL如何找出未提交事务信息”,现在看来,这篇文章中不少知识点或观点都略显肤浅,或者说不够深入,甚至部分结论是错误的。下面重新探讨一下这个话题。那么我们还是以之前的例子来...

    2024年SQL语句常考面试题(干货满满).zip

    内容涉及SQL的定义、数据库类型、SQL语言的不同分类(DDL、DML、DCL)、连接类型(内连接、左连接等)、索引的作用和原理、事务的概念及其ACID特性、SQL注入的防护、存储过程与函数的区别、触发器的功能、视图的使用...

    50个永不过时SQL性能优化技巧.pdf

    SQL优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。这个资源整理了50个永不过时的SQL性能优化技巧,无论是在数据库表设计的时候,还是在SQL开发的时候,比较高频出现的优化点。 ...

    程序员的SQL金典6-8

    第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  ...

    程序员的SQL金典7-8

    第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  ...

    程序员的SQL金典3-8

    第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  10.2.3 全表扫描和索引查找  ...

    程序员的SQL金典

    本书第1、2章介绍数据库系统的基本知识以及基本操作;...第10章介绍注入漏洞攻击、SQL 调优、事务、自动增长字段、NULL 值处理、开窗函数等高级话题;第11章以一个案例讲解书中知识点在实际开发中的应用。

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    《程序员的SQL 金典》

    第一本专门为程序员编写的数据库图书 本书第1、2 章介绍数据库...第10 章介绍注入漏洞攻击、SQL 调优、事务、自动增长字段、NULL 值处 理、开窗函数等高级话题;第11章以一个案例讲解书中知识点在实际开发中的应用。

    SQL Server里的文件和文件组

    在的文章里,我想谈下SQL Server里非常重要的话题:SQL Server如何处理文件的文件组。当你用CREATE DATABASE命令创建一个简单的数据库时,SQL Server为你创建2个文件:  一个数据文件(.mdf)  一个事务日志文件...

    基于JSP毕业设计-+SQL房屋租赁管理信息系统JDBC(源代码+论文+答辩PPT).zip

    【摘要】 随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用...

    [计算机毕设]基于jsp+sql的房屋租赁管理信息系统设计与实现(源代码+项目报告+答辩PPT).zip

    随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用软件,运用高...

    JSP+SQL房屋租赁管理信息系统JDBC(源代码+论文+答辩PPT).zip

    随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用软件,运用高...

    基于JAVA JSP+SQL房屋租赁管理信息系统JDBC的毕业设计,以软件工程理论作为系统开发的理论基础,以客户机/服务器模式的

    随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用软件,运用高...

    SQLServer 数据库中如何保持数据一致性

    根据实现策略的不同,主要有快照复制、事务复制、合并复制等三种类型。这三种复制类型,各有各的特点,分别适用于不同的场合。一般来说,在考虑采用哪种复制类型比较合适的时候,主要考虑的是性能与数据同步的时间...

Global site tag (gtag.js) - Google Analytics