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

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

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






           Joe's Car Palace             385               5 



            S。C。 Student Loan           220               6 



           Florida Water pany        22                1 



           U…O…Us Insurance pany     137。50            5 



    最后一步是测试 UPDATE 函数  为 BILLS  表中所有的 NEW_TOTAL  中大于 100 的增 



加 10 



INPUT/OUTPUT 



    SQL》 UPDATE LATE_PAYMENT 



        2    SET  NEW_TOTAL  =  NEW_TOTAL  +  10 



        3    WHERE  NEW_TOTAL  》  100; 



    SQL》 SELECT * FROM LATE_PAYMENT; 



            NAME                         NEW_TOTAL       ACCOUNT_ID 



            Phone pany                147。50          1 



            Power pany                82。50           1 



            Record Club                  27。50           2 



            Software pany             285             1 



            Cable TV pany             38。50           3 



            Joe's Car Palace             395             5 



            S。C。 Student Loan            230             6 



            Florida Water pany        22              1 



            U…O…Us Insurance pany     147。50          5 



在视图中修改数据的几个问题 



    你大概已经看到了            视图其实就是一组表的映射               所以想要修改下层表的数据并不会 



总是像上例那样直接            下面给出了你在使用视图进行工作时常用会遇到的限制 



    l   对于多表视图你不能使用 DELETE 语句 



    l    除非底层表的所有非空列都已经在视图中出现                        否则你不能使用 INSERT          语句 



        有这个限制的原因是 SQL 不知道应该将什么数据插入到 NOT  COLUMNS  限制列 



         中  没有在视图中出现的 



    l    如果对一个归并的表格插入或更新记录                     那么所有被更新的记录必须属于同一个 



                                                                                 205 


…………………………………………………………Page 206……………………………………………………………

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



      物理表 



   l  如果你在创建视图时使用了 DINTINCT    子句  那么你就不能插入或更新这个视图 



      中的记录 



   l  你不能更新视图中的虚拟列  它是用计算字段得到了 



通用应用程序的视图 



   下边有几个视图需要完成的任务 



   l  提供了用户安全功能 



   l  可以进行单位换算 



   l  创建一个新的虚拟表格式 



   l  简单的结构化复合查询 



视图与安全性 



   尽管我们需要在第 12 天的  数据库安全      中才会完全地讨论数据库的安全性  但是在 



本题目下我们先来大致谈一谈如何使用视图的安全性功能 



   所有的关系型数据库在今天都有着完善的内置的安全性特性             数据库系统的用户通常 



会根据他们所使用的数据库来分成不同的组            常用组的类型有数据库管理员        database 



administrators 数据库开发员  database developers 数据录入人员  data entry personnel 



和大众用户    不同的组在使用数据库时有着不同的权限         数据库管理员具有系统的完全控 



制权限   包括更新   UPDATE  插入  INSERT  删除  DELETE  修改  ALTER 数 



据库的特权    而大众用户则只有使用 SELECT   语句的权利 — — 或许是只有对特定的数据库 



使用特定的 SELECT 语句的权利 



   视图通常用在对用户访问数据进行控制的场所          例如   如果你只想让用户访问 BILLS 



表中的 NAME 字段   你需要创建一个名字叫 BILLS_NAME 的视图 



INPUT/OUTPUT 



   SQL》  CREATE VIEW BILLS_NAME AS SELECT NAME FROM BILLS 



   具有系统管理员权限的人也可以使用具有公共组 SELECT         权限的 BILLS_NAME 该 



组没有任何对下层 BILLS  表的权限    如你所料   SQL 也提供了可以使用的数据安全语句 



现在你要知道的是视图对于实现数据库的安全有相当大的用处 



                                                      206 


…………………………………………………………Page 207……………………………………………………………

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



在单位换算中使用视图 



    视图在你提供给用户的数据与数据库中的真实数据不同时也相当有用                              例如    如果 



AMOUNT   字段实际上存储于美国           加拿大的用户不想频繁地进行美元与加拿大元之间的 



转换工作  那么你可以创建一个叫 CANADA_BILLS  的视图 



INPUT/OUTPUT 



    SQL》  CREATE VIEW CANADIAN_BILLS (NAME; CAN_AMOUNT) AS 



        2      SELECT  NAME;  AMOUNT  /  1。10 



        3      FROM  BILLS 



    SQL》 SELECT * FROM CANADIAN_BILLS 



                 NAME                     CAN_AMOUNT 



                 Phone pany             125 



                 Power pany            75 



                 Record Club              25 



                 Software pany         250 



                 Cable TV pany         35 



                 Joe's Car Palace         350 



                 S。C 。 Student Loan       200 



                 Florida Water pany    20 



                 U…OUs Insurance pany 125 



    分析 



    当进行类似这样的单位转换时             要注意当计算字段创建一个列时修改底层表的数据时 



可能带来的问题        与往常一样  你应该查看你的数据库系统的相关文档看一看你的系统上 



的 CREATE VIEW 命令是如何执行了 



在视图中使用简单的结构化复合查询 



    视图在你需要按次序运行一系列查询以后得到某个结果的情况下也很有用                              下边的例 



子显示了如何在这种情况下使用视图 



    如果想找出所有发给德克萨斯州的账单金额少于 50 美元的银行的名字  你可以把这个 



问题分解成如下的两个问题 



    l   得到所有发给德克萨斯州的账单 



                                                                       207 


…………………………………………………………Page 208……………………………………………………………

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



    l   找出账单中金额小于 50 美元的记录 



    让我们用两个分开的视图 BILLS_1 和 BILLS_2 来解决这两个问题 



INPUT/OUTPUT 



    SQL》 CREATE TABLE BILLS1 AS 



        2    SELECT  *  FROM  BILLS 



        3    WHERE  AMOUNT  《  50; 



    SQL》 CREATE TABLE BILLS2 (NAME; AMOUNT; ACCOUNT_ID) AS 



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