八宝书库 > 文学其他电子书 > SQL 21日自学通(V3.0)(PDF格式) >

第47部分

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

小说: SQL 21日自学通(V3.0)(PDF格式) 字数: 每页4000字

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






         Record Club               25         1200 



         Cable TV pany          35         90 



         Debtor's Credit Card      35         400 



         Joe's Car Palace          350        2500 



         U…O…Us Insurance pany  125        2500 



         S。C。 Student Loan         200        4500 



分析 



    这个例子中首次在相关的表中为 ACCOUNT_ID                字段创建了索引        在每一个表中均对 



ACCOUNT_ID   字段创建了索引以后           归并就可以更快地访问特定行的数据  作为一个规 



则  你应该对表中的唯一属性的字段或你用以归并操作的字段来创建索引 



群集       簇     的使用 



    尽管在开始的时候我们曾经说过索引只是提供给用户的一种与数据的物理存在不同的 



查看方式      但是这话并不是绝对的           在许多数据管理系统中都支持一种特殊的                   可以允许 



数据库管理员或开发人员对数据进行群集的索引                      当使用群集索引时  数据在表中的物理 



排列方式将会被修改          使用群集索引通常比传统的不使用群集的索引速度要快                         但是    许 



多数据库管理系统  如 Sybase 的SQL  Server         只允许一个表有一个群集索引  用于创建群 



集索引的字段常常是主关键字              用 Sybase 的 Transact…SQL 你可以对 BANK_ACCOUNT      的 



ACCOUNT_ID 字段创建一个群集的            不重复的索引  语法如下 



SYNTAX 



    create unique clustered index id_index on BANK_ACCOUNTS(ACCOUNT_ID) 



      go 



    ORACLE   中群集的概念与此不同  当使用 ORACLE              关系数据库系统时  群集就是一 



个像数据或表一样的对象            群集一般是存储了表的共有字段以提高对表的访问速度 



    这是一个 ORACLE7  中创建群集的例子 



                                                                         219 


…………………………………………………………Page 220……………………………………………………………

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



SYNTAX 



   CREATE CLUSTER 'schema。'cluster  (column datatype ';column datatype' 。。。 ) 



   'PCTUSED integer' 'PCTFREE integer'  'SIZE integer 'K|M' ' 



   'INITRANS integer' 'MAXTRANS integer'  'TABLESPACE tablespace' 



   'STORAGE storage_clause'  '!!under!!INDEX | 'HASH IS column' HASHKEYS integer' 



   你随后创建的其于该表的群集的索引会被加入到群集中  然后把表也加入群集中                      你 



应该只将经常需要归并的表加入到群集            不要向群集中加入只需要用简单的 SELECT         语句 



进行个别访问的表 



   很明显  群集是 SQL  的第三方特性  所以我们不准备详细地讨论创建和使用它的语法 



的细节问题  但是     你要查看你的数据库系统的文档看它是否支持这一有用的特性 



总结 



   视图是一种虚表      视图是提供给用户的数据与其在数据库的真实面貌不相同的一种方 



法  CREATE  VIEW 语法的语法使用了标准的 SELECT  语法来创建了一个视图           除了一些 



小差别    你可以将视图视为一个常规的表来执行插入  删除              更新和选择操作  我们也简 



要地提到了视图是实现数据库安全的一种重要方法               有关数据的安全性将在第 12 天作更详 



细的讨论 



   基本的创建视图的语法如下 



   CREATE VIEW view_name AS SELECT field_name(s) FROM table_name(s) 



   视图主要用于以下方面 



       l  提高用户数据的安全性 



       l  进行单位换算 



       l  创建一个新格式的虚表 



       l  使复杂查询的构筑简单化 



   索引也是一种数据库设计和 SQL 编程的工具           索引是一种存储在你的数据库管理系统 



中的物理对象  它可以让你的查询更快地从数据库中返回数据                此外   索引是可以定制的 



正确地在查询中使用索引可以使性能显著地提高 



   创建索引的基本语法如下 



   CREATE INDEX index_name ON table_name field_name s 



                                                            220 


…………………………………………………………Page 221……………………………………………………………

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



   在一些数据库系统中提供了一些非常有用的如 UNIQUE             和 CLUSTER  关键字附加选 



项 



问与答 



问  如果数据已经在我的数据库中进行了排序  我是否还有必须在表中使用索引 



答  索引通过在树结构中查找关键值而提高你的数据库查询性能                  它比对数据库的顺序访 



   问方式快得多  记住      SQL 不需要知道你的数据库是否已经进行了排序 



问  我可以创建一个包括多个表中字段的索引吗 



答  你不能  但是     以 ORACLE 为例  它允许你创建一个群集       你可以将表放入群集中以 



   根据表的共有字段创建一个群集索引  这是它的一个例外  所有你应该查看你所使用 



   的解释器的文档以找到这方法的详细解答 



校练场 



1  当在一个不唯一的字段中创建一个唯一值索引会有什么结果 



2  下边的话是对是错 



  视图和索引都会占用数据库的空间           所以在设计数据库空间时要考虑到这一点 



  如果一个从更新了一个已经创建视图的表  那么视图必须进行同样的更新才会看到相同 



   的数据 



  如果你的磁盘空间够而你想加快你的查询的速度  那么索引越多越好 



3  下边的 CREATE 语句是否正确 



      SQL》 create view credit_debts as (select all from debts where account_id = 4) 



4  下边的 CREATE 语句是否正确 



  SQL》 create unique view debts as select * from debts_tbl 



5  下边的 CREATE 语句是否正确 



      SQL》 drop * from view debts 



6  下边的 CREATE 语句是否正确 



      SQL》 create index id_index on bills  account_id 



                                                            221 


…………………………………………………………Page 222……………………………………………………………

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



练习 



1  检查你所使用的数据库系统      它是否支持视图     允许你在创建视图时使用哪些选项        用 



  它的语法来写一个简单的创建视图语句          并对其进行如 SELECT  和 DELETE  等常规操 



  作后再删除视图 



2  检查你所使用的数据库系统看它是否支持索引          它有哪些选项  在你的数据库系统中的 



  一些已经存在的表中试一下这些选项           进一步   确认在你的数据库系统中是否支持 



  UNIQUE 和 CLUSTER 索引 



3  如果可能的话  在一个表中输入几千条记录        用秒表或钟来测定一下你的数据库系统对 



  特定操作的反映时间      加入索引是否使性能提升了       试一下今天提到的技巧 



                                                       222 


…………………………………………………………Page 223……………………………………………………………

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



第 11 天    事务处理控制 



   前十天中我们学习了实际上我们可以对关系数据库系统中的数据所做的每一件事               例 



如  我们已经知道了如何使用 SQL    的 SELECT 语句根据用户给定的条件从一个或多个表 



中获得数据  我们也有机会体验了数据修改语句如 INSERT      DELETE UPDATE 在今天 



我们将成为中级 SQL 用户   如果有必要  我们将建立一个数据库及其相关的表  每一个表 



中都包括几个不同类型的字段  通过合适的设计方法         我们会成为从数据库到应用程序的 



桥梁 



目标 



   如果你是一个临时用户     只需要偶而使用 SQL 从数据库获得数据的话  那么前十天的 



的主题已经为你提供了足够的内容  但是       如果你想开发可以在使用数据库系统下运行的 



专业应用程序  这在当前在很普遍的       那么你在今后四天中讲到的内容  事务控制  安全 



内嵌 SQL 语句 数据库过程  将会对你有很大的帮助      我们先从事务控制开始     到今天的 



结束  我们将学会以下内容 



   l  基本的事务控制 



   l  如何确认或终止某一项事务 



   l  Sybase 与 Oracle 在事务处理上的不同之处 



注  在今天的例子中我们使用 PERSONAL  ORACLE  7 和 SYBASE  SQL  SERVER 对于你 



  所使用的解释器请查看相应的帮助文档以找出它们的不同之处 



事务控制 



   事务控制或者说事务处理是指关系数据库系统执行数据库事务的能力             事务是指在逻 



辑上必须完成的一命令序列的单位       单元工作期是指事务的开始和结束时期        如果在事务 



中产生的错误  那么整个过程可以根据需要被终止         如果每一件事都是正确的     那么结果 



将会被保存到数据库中 



   日后你也许会运行其于网络的多用户应用程序  客户/服务环境就是为它而设计的             传 



                                                   223 


…………………………………………………………Page 224……………………………………………………………

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



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



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



银行应用程序 



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



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



账号中支取了 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        

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的