<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 的初学者和进阶者。如果你是一个对数据库操作感兴趣的...
透彻分析函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值处理、事务、开窗函数等高级技术;通过对实际案例开发过程的详细分析,使读者掌握 SQL的综合应用技巧。 内容简介 本书主要介绍SQL的语法...
第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的定义、数据库类型、SQL语言的不同分类(DDL、DML、DCL)、连接类型(内连接、左连接等)、索引的作用和原理、事务的概念及其ACID特性、SQL注入的防护、存储过程与函数的区别、触发器的功能、视图的使用...
SQL优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。这个资源整理了50个永不过时的SQL性能优化技巧,无论是在数据库表设计的时候,还是在SQL开发的时候,比较高频出现的优化点。 ...
第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 全表扫描和索引查找 ...
第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 全表扫描和索引查找 ...
第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 全表扫描和索引查找 ...
本书第1、2章介绍数据库系统的基本知识以及基本操作;...第10章介绍注入漏洞攻击、SQL 调优、事务、自动增长字段、NULL 值处理、开窗函数等高级话题;第11章以一个案例讲解书中知识点在实际开发中的应用。
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
第一本专门为程序员编写的数据库图书 本书第1、2 章介绍数据库...第10 章介绍注入漏洞攻击、SQL 调优、事务、自动增长字段、NULL 值处 理、开窗函数等高级话题;第11章以一个案例讲解书中知识点在实际开发中的应用。
在的文章里,我想谈下SQL Server里非常重要的话题:SQL Server如何处理文件的文件组。当你用CREATE DATABASE命令创建一个简单的数据库时,SQL Server为你创建2个文件: 一个数据文件(.mdf) 一个事务日志文件...
【摘要】 随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用...
随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用软件,运用高...
随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用软件,运用高...
随着信息自动化处理技术的日益发展,如何科学,全面,高效的对单位纷繁复杂的档案管理事务进行计算机的自动化管理是个热门话题,当前企事业单位为了提升自身的竞争力,各单位都在定制和购买各项业务应用软件,运用高...
根据实现策略的不同,主要有快照复制、事务复制、合并复制等三种类型。这三种复制类型,各有各的特点,分别适用于不同的场合。一般来说,在考虑采用哪种复制类型比较合适的时候,主要考虑的是性能与数据同步的时间...