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

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

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






统上的服务器  例如数据库服务器                支持多个与它连接的工作站              与其它技术一样  新特 



性提高了数据库的复杂程度              下边的几段描述了一个银行所使用的应用程序 



银行应用程序 



    假定你受雇于联邦银行并负责为他们设计一个支票管理系统                            你已经设计了一个非常 



完美的数据库  并且经常测试检验证明是正确无误的                        你在应用程序中调用它以后              你从 



账号中支取了 20 元并进行验证             数据库中确实已经少了 20 元  你又从帐号中存入了 50。25 



元并进行验证  结果也与所期望的相同                  于是你骄傲在告诉你的老板系统可以运行了                     几 



台计算机接入了程序并开始工作 



    几分钟以后       你注意到了一个你没有预见的问题                 一个出纳员向帐号中存入了一张支 



票而另一个出纳则从相同的帐号中提出了一部分钱                        在分钟之内       由于多用户的同时操作 



就导致的帐目无法平衡            很不幸     由于他们之间互相进行更新和写入操作  你的应用程序 



很快就因为过负荷而断线             我们假定出现这个问题的数据库名字叫 CHECKING                    它有两个 



表   其内容如下所示 



表 11。1 



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 



表 11。2 



Average_Bal     Curr_Bal      Account_ID 



  1298。53         854。22            1 



  5427。22        6015。96            2 



   211。25          190。01           3 



    73。79          25。87            4 



  1285。90         1473。75           5 



  1234。56         1543。67           6 



   345。25         348。03            7 



    假定你的应用程序为 BILL Turner 运行了 SELECT 查询并得到如下结果 



OUTPUT 



                                                                           224 


…………………………………………………………Page 225……………………………………………………………

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



   NAME   Bill Turner 



   ADDRESS   725 N。 Deal Parkway 



    CITY Washington 



    STATE DC 



    ZIP 20085 



    CUSTOMER_ID   1 



    当返回数据的时候  另外一个用户连接到了数据库并更新了 BILL Turner  的住址信息 



INPUT 



    SQL》 UPDATE CUSTOMERS SET Address =〃11741 Kingstowne Road〃 



         WHERE Name =  〃Bill Turner〃 



    你现在看到了      如果在你执行 SELECT     语句当中出现的更新操作的话那么你所得到的 



结果将是不正确的        如果你的应用程序可以生成一个信件给 Bill  Turner           那么由于地址是 



错误的    如果信已经发送了        那你是不能对地址进行修改的            但是如果你使用了事务处理 



机制   那么你就可以对检测到错误的数据进行修改                 你所进行的所有操作也都可以撤消 



开始事务处理 



    事务处理在执行上是非常简单的            你需要检查你所执行的语法是 Oracle  RDBMS  SQL 



语法还是 Sybase SQL Server SQL 语法 



    所有支持事务处理的系统都必须以一种准确的语法来告诉系统一项事务是如何开始的 



  不要忘记事务处理只是工作的逻辑分组  它有自己的开始和结束                        在使用 PERSONAL 



ORACLE7  时  它的语法形式如下 



SYNTAX 



    SET TRANSACTION {READ ONLY | USE ROLLBACK SEGMENT segment} 



    SQL  标准要求每一种数据库的 SQL  解释器都必须运支持语句级的读一致                     这也就是 



说   当某一条语句运行的时候数据必需保持不变  但是                  在许多情况下在一个工作过程中 



必须要求数据保持有效 而不仅仅是对单个语句 ORACLE 允许用户用 SET TRANSACTION 



来指定事务的开始        如果你想检查 BILL  TUNER  的信息并且要保证数据在这之中是不能改 



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



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