<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没有执行.
以上只是个人的一点认识和见解,若有错误或不当之处希望大家指正.
分享到:
相关推荐
从技术角度看,HBase分布式事务与SQL实现是一个复杂的话题,它涉及到分布式系统理论、事务处理机制、数据库设计和实际的应用场景等多个领域。理解和掌握这些知识点对于想要深入研究和使用HBase以及TiDB这类分布式...
5. 高级话题:书中还会涵盖一些高级主题,如事务的性能优化、故障恢复策略、异常处理和事务日志,这些都是在实际开发中必须考虑的问题。 6. 实战案例:书中会提供具体的代码示例和实战案例,帮助读者将理论知识应用...
4. 数据被误删的恢复问题:当没有备份时,可以通过日志文件(如SQL Server的事务日志)尝试进行数据恢复,或者使用第三方数据恢复工具。 5. SQL Server内存占用问题:服务器内存占用持续上升可能是因为内存泄漏或...
"SQLServer自动杀死死锁进程"这一话题旨在探讨如何配置SQL Server来自动检测并解决这些死锁情况,以避免系统阻塞和性能下降。 1. **死锁的基本概念**: 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一...
标签“sqlserver”表明了这个话题与Microsoft SQL Server数据库管理系统相关。SQL Server是一个强大的关系型数据库系统,广泛应用于企业级的数据存储和管理,提供高可用性、安全性以及性能优化等功能。 综上所述,...
9. **高级主题**:可能还包括触发器、游标、函数和自定义类型等高级话题,这些特性可以增强SQL的功能性和灵活性。 《经典SQL语句大全.doc》这份文档很可能是书中部分内容的摘录或精华版,包含了一些典型的SQL语句...
在SQL资料中,你可能还会遇到各种数据库管理系统(如MySQL、Oracle、SQL Server、PostgreSQL等)的特定特性,以及高级话题,如性能优化、备份恢复策略、数据库设计原则等。通过深入学习并实践这些知识点,你将能够...
书中还可能涉及了更高级的话题,例如: - 数据操纵语言(DML)的操作:如INSERT、UPDATE、DELETE语句的使用,如何向表中添加数据、更新表中的数据、删除表中的数据。 - 数据定义语言(DDL)的操作:如CREATE ...
8. **高级主题**:可能还包括一些高级话题,如动态SQL、嵌套查询、联接操作、子查询、窗口函数等,这些都是进行复杂数据分析和报表生成时经常用到的工具。 通过《T-SQL编程入门经典》这本书,读者将能够系统地学习T...
SQL Server 连接 Oracle 方法是数据库管理系统中的一个重要话题。本文将详细介绍如何在 SQL Server 中连接 Oracle 数据库,并解决在连接过程中可能出现的问题。 安装 Oracle 客户端程序 在 SQL Server 所在服务器...
最后,Oracle PL/SQL Language Reference 11g Release 2 (11.2)还会提供关于PL/SQL与其他技术的集成信息,比如与Oracle SQL Developer的集成,以及如何在Java程序中调用PL/SQL代码等高级话题。 需要注意的是,由于...
标签"jdbc sql2014"进一步强调了这是关于使用JDBC与SQL Server 2014数据库进行交互的话题。 在压缩包子文件名称"sqljdbc_4.2.8112.100_chs"中,我们可以推断出几个信息: - "sqljdbc"代表这是SQL Server的JDBC驱动...
总的来说,这个“SQL基础培训PPT”应包含了从基础概念到实际操作的全面教程,适合初学者入门学习,同时也涵盖了数据库性能优化的高级话题,对于有一定经验的数据库管理员也有很高的参考价值。通过深入理解和实践这些...
T-SQL是SQL Server的主要编程语言,它在ANSI SQL标准的基础上扩展了一些特定的功能,如内置函数、事务控制、数据修改语句、游标操作等。T-SQL是管理SQL Server数据库和编写数据库应用程序的核心技术。 3. T-SQL查询...
- 对这些操作的回滚和事务管理 6. **创建与修改表结构**(learn-sql-the-hard-waych14.html) - CREATE TABLE创建新表 - ALTER TABLE修改表结构 - 添加、删除和修改字段 - 定义约束,如主键、外键、唯一性等 ...
- **事务处理**:在复杂的数据库操作中,事务处理保证数据的一致性和完整性,可以通过BEGIN、COMMIT和ROLLBACK语句控制。 总结,Visual Studio与SQL Server的连接是开发数据库应用程序的基础。理解如何配置连接字符...
在本话题中,我们将探讨“SQLServer示例数据库脚本”这个主题,它涉及到如何利用提供的SQL脚本来创建和操作数据库。 SQL Server的默认示例数据库是为了方便用户学习和测试SQL Server的功能而设计的。这些数据库通常...
在更高级的话题中,《SQL语言艺术》会讲解联接(JOIN)操作,这是将多个表的数据整合在一起的关键。内连接、外连接(如左连接、右连接和全连接)以及交叉连接,都有各自的适用场景和策略。另外,子查询也是SQL中的...