友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

SQL 21日自学通(V3.0)(PDF格式)-第44部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!




    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 {transaction | tran | work}  'transaction_name | savepoint_name' 



一个 ORACLE 的命令序列如下 



INPUT 



SQL》 SET TRANSACTION; 



SQL》 INSERT INTO CUSTOMERS VALUES 



     (〃Bubba MacDowell〃; 〃2222 Blue Lake Way〃; 〃Austin〃; 〃TX〃; 39874; 8); 



SQL》 ROLLBACK; 



SQL》 SELECT * FROM CUSTOMERS; 



     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 



                                                                                230 


…………………………………………………………Page 231……………………………………………………………

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



而 A Sybase SQL  的命令序列则如下 



INPUT 



     1》 begin transaction 



    2》 insert into CUSTOMERS values 



       (〃Bubba MacDowell〃; 〃2222 Blue Lake Way〃; 〃Austin〃; 〃TX〃; 39874; 8) 



    3》 rollback 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 



    你也看到了         由于使用了 ROLLBACK  命令撤消了 INSERT                命令    新的记录并没有被 



加入到表中 



    如果你写了一个图形用户界面的应用程序                        比如 MICRO  WINDOWS         你可以做一个 



数据库查询对话框以便让用户在其中输入数值  如果用户按下了                                  确定     按钮    那么数据 



库将会保存所做的改动              如果用户按下了           取消  按钮       那么所有的更改就会被取消                显 



然   这种情况给予了你使用事务处理的机会 



    注    下边的代码给出的 ORACLE  SQL 中的使用方法  注意这里有 SQL》并且有行号 



在随后给出的 Sybase SQL syntax 中则没有SQL》提示符 



当对话框载入后  这些 SQL 语句将会运行 



INPUT 



SQL》 SET TRANSACTION; 



SQL》 SELECT CUSTOMERS。NAME; BALANCES。CURR_BAL; BALANCES。ACCOUNT_ID 



    2    FROM  CUSTOMERS;  BALANCES 



    3    WHERE  CUSTOMERS。NAME  =  〃Rebecca  Little〃 



                                                                                  231 


…………………………………………………………Page 232……………………………………………………………

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



    4    AND  CUSTOMERS。CUSTOMER_ID  =  BALANCES。ACCOUNT_ID; 



    该对话框允许用户更改当前的结算账号  所以你需要将该数据返回给数据库 



    当按下 OK 按钮以后  UPDATE 将会运行 



INPUT 



SQL》 UPDATE BALANCES SET CURR_BAL = 'new…value' WHERE ACCOUNT_ID = 6; 



SQL》 MIT 



    如果用户按下了 CANCEL           那么将会运行 ROLLBACK 命令 



INPUT 



SQL》 ROLLBACK 



    当该对话框在 Sybase SQL 中被载入以后  将会运行下边的语句 



INPUT 



1》 begin transaction 



2》 select CUSTOMERS。Name; BALANCES。Curr_Bal; BALANCES。Account
返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!