按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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