友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

SQL 21日自学通(V3.0)(PDF格式)-第60章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






变的   那么你可以使用如下语句 



INPUT 



                                                                   225 


…………………………………………………………Page 226……………………………………………………………

SQL 21  日自学通(V1。0)                                                        翻译人    笨猪 



SQL》 SET TRANSACTION READ ONLY 



SQL》 SELECT * FROM CUSTOMERS 



          WHERE  NAME  =  'Bill  Turner'; 



SQL》 MIT 



    我们将在今天的晚些时候来讨论 MIT 语句                       这里的 SET  TRANSACTION  READ 



ONLY 允许你锁定一个记录集直到事务结束  你可以在下列语句中使用 READ ONLY 选项 



             SELECT 



             LOCK TABLE 



             SET ROLE 



             ALTER SESSION 



             ALTER SYSTEM 



    选项 USE ROLLBACK SEGMENT  告诉 ORACLE 数据库提供数据回溯的存储空间段 



这一选项是 ORACLE 对标准的 SQL 的扩展  如果需要维护你的数据库请参见 ORACLE  的 



帮助文档以获得更多的帮助信息 



    SQL Server's Transact…SQL 语言用下边的方法来实现了开始事务处理的命令 



SYNTAX 



begin {transaction | tran} 'transaction_name' 



    它的实现方法与 ORACLE            的有一些不同          SYBASE 不允许你指定 READ  ONLY  选 



项  但是      SYBASE  允许你给出事务处理的名字                 从最早的事务到最近发生的事务处理都 



可以一次退回 



INPUT 



1》 begin transaction new_account 



2》 insert CUSTOMERS values (〃Izetta Parsons〃; 〃1285 Pineapple Highway〃; 〃Greenville〃; 〃AL〃 



32854; 6) 



3》 if exists(select * from CUSTOMERS where Name = 〃Izetta Parsons〃) 



4》 begin 



5》 begin transaction 



6》 insert BALANCES values(1250。76; 1431。26; 8) 



7》 end 



8》 else 



                                                                                  226 


…………………………………………………………Page 227……………………………………………………………

SQL 21  日自学通(V1。0)                                                       翻译人     笨猪 



9》 rollback transaction 



10》 if exists(select * from BALANCES where Account_ID = 8) 



11》 begin 



12》 begin transaction 



13》 insert ACCOUNTS values(8; 6) 



14》 end 



15》 else 



16》 rollback transaction 



17》 if exists (select * from ACCOUNTS where Account_ID = 8 and Customer_ID = 6) 



18》 mit transaction 



19》 else 



20》 rollback transaction 



21》 go 



    现在  请不要担心 ROLLBACK  TRANSACTION 和 MIT  TRANSACTION 语句 



重要的问题是这是一个内嵌的事务处理                     或者说是事务处理之中还有事务处理 



    注意     最开始的事务处理在第 1  行  之后是插入语句                      你检查了插入确实已经执行了 



以后  第二个事务处理在第 5 行开始  这种在事务之中的事务在术语上称为内嵌事务 



有一些数据库支持 AUTOMIT 选项                 它可以在 SET 命令中使用             如下例 



SET AUTOMIT 'ON | OFF' 



    默认情况上 SET AUTOMIT ON 命令在启动时是自动运行的                           它告诉 SQL  自动确 



认你所运行的所有的语句               如果你不想让这个命令自动运行  那么请将它的参数设为 NO 



SET AUTOMIT OFF 



注  请检查你的数据库文档确认在你的数据库系统中一项事务处理是如何开始的 



结束事务处理 



    在 ORACLE 语法中结束事务处理语句的语法如下 



SYNTAX 



    MIT 'WORK' 



    ' MENT 'text' 



                                                                                  227 


…………………………………………………………Page 228……………………………………………………………

SQL 21  日自学通(V1。0)                                                        翻译人     笨猪 



     | FORCE 'text' '; integer' ' ; 



    它的命令语法与 Sybase 的语法是相同的 



语法 



    MIT (TRANSACTION | TRAN | WORK) (TRANSACTION_NAME) 



    MIT  命令将保存在一项事务中所进行的所有的改变                            在开始一项事务处理之前要 



先运行 MIT 命令以确保在之前没有事务未被确认 



在下边的例子中          如果 MIT 没有收到任何系统错误的情况下它将会执行确认 



INPUT 



SQL》 MIT; 



SQL》 SET TRANSACTION READ ONLY; 



SQL》 SELECT * FROM CUSTOMERS 



          WHERE  NAME  =  'Bill  Turner'; 



………Do Other Operations……



SQL》 MIT; 



在 ORACLE 中 MIT 语句的使用方法如下 



INPUT 



SQL》 SET TRANSACTION; 



SQL》 INSERT INTO CUSTOMERS VALUES 



     (〃John MacDowell〃; 〃2000 Lake Lunge Road〃; 〃Chicago〃; 〃IL〃; 42854; 7); 



SQL》 MIT; 



SQL》 SELECT * FROM CUSTOMERS; 



CUSTOMER 表的内容如下 



Name              Address                   City          State     Zip    Customer_ID 



Bill Turner       725 N。 Deal Parkway       Washington    DC      20085    1 



John Keith        1220 Via De Luna Dr。      Jacksonville  FL      33581    2 



Mary Rosenberg    482 Wannamaker Avenue     Williamsburg  VA      23478    3 



David Blanken     405 N。 Davis Highway      Greenville    SC      29652    4 



Rebecca Little    7753 Woods Lane           Houston       TX      38764    5 



Izetta Parsons    1285 Pineapple Highway    Greenville    AL      32854    6 



John MacDowell    2000 Lake Lunge Road      Chicago       IL      42854    7 



而 Sybase SQL 使用 MIT 的语法方式如下 



                                                                                   228 


…………………………………………………………Page 229……………………………………………………………

SQL 21  日自学通(V1。0)                                                            翻译人     笨猪 



INPUT 



1》begin transaction 



2》insert into CUSTOMERS values 



  (〃John MacDowell〃; 〃2000 Lake Lunge Road〃; 〃Chicago〃; 〃IL〃; 42854; 7) 



3》mit transaction 



4》go 



1》select * from CUSTOMERS 



2》go 



     Name                  Address                 City       State     Zip     Customer_ID 



Bill Turner        725 N。 Deal Parkway        Washington     DC      20085     1 



John Keith         1220 Via De Luna Dr。       Jacksonville   FL      33581     2 



Mary Rosenberg     482 Wannamaker Avenue      Williamsburg   VA      23478     3 



David Blanken      405 N。 Davis Highway       Greenville      SC     29652     4 



Rebecca Little     7753 Woods Lane            Houston        TX      38764     5 



Izetta Parsons     1285 Pineapple Highway     Greenville     AL      32854     6 



John MacDowell     2000 Lake Lunge Road       Chicago        IL      42854     7 



     上边的语句完成了与 ORACLE7               相同的功能  但是            在使用 MIT  确认事务处理 



之前  你应该确保在该事务中的工作是正确无误的 



注  MIT  WORD  命令与 MIT  命令的作用是相同的                          或 Sybase   中的 MIT 



    TRANSACTION       它与 ANSI SQL  的语法一样的简单 



     切记 MIT 语句一定要与之前的 SET  TRANSCATION 或 BEGIN  TRANSCATION 



语句一致       注意  在下边的语句中你将会收到错误信息 



Oracle SQL 



INPUT 



     SQL》 INSERT INTO BALANCES values (18765。42; 19073。06; 8); 



     SQL》 MIT WORK; 



Sybase SQL 



INPUT 



     1》 insert into BALANCES values (18765。42; 19073。06; 8) 



     2》 mit work 



                                                                                       229 


…………………………………………………………Page 230……………………………………………………………

SQL 21  日自学通(V1。0)                                                      翻译人    笨猪 



取消事务处理 



    在一个事务处理的过程中              常常会运行一些错误检查以确认在过程中是否语句是运行 



成功  你可以使用 ROLLBACK  语句来撤消事务中所做的每一项工作                             即便工作是成功的 



你也可以撤消  但是           这必须是在 MIT 之前  ROLLBACK 语句必须在一个事务之中 



运行    它可以一直撤消到事务的开始  也就是说                     数据库会一直返回到事务处理刚开始的 



状态  在 ORACLE 7 中它的语法形式如下 



SYNTAX 



    ROLLBACK 'WORK' 



    ' TO 'SAVEPOINT' savepoint 



    | FORCE 'text' ' 



    如你所见       该命令可以设置事务的 SAVEPOINT               我们将在今天的晚些时候来讨论这 



项技术 



Sybase Transact…SQL's 的ROLLBACK 语句与 MIT 语句非常相似 



SYNTAX 



    rollback {tra
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!