实验四:视图操作和数据控制
(一)实验目的: 熟练掌握用SQL语句实现视图操作和数据控制。 (二)实验内容:
(一)定义如下视图:
①查询北京的供应商的编号、名称和城市。 ②查询S1供应商的所有供应明细。
③查询各工程名称使用的各种颜色零件的个数。 查询上面定义的视图。
(二)数据控制:
①使用GRANT把对S表查询的权利授予WangLi。
②使用GRANT把对P表查询、插入、修改、删除的权利授予LiMing。 ③使用REVOKE把LiMing对P表插入、删除的权利回收。
(三)完成情况:
①查询北京的供应商的编号、名称和城市。
create view s1_s as
select sno,sname,city 1from s
where city ='北京'
select * from s1_s
②查询S1供应商的所有供应明细。
create view s2_s as
select * from s
where sno ='s1'
select * from s2_s
③查询各工程名称使用的各种颜色零件的个数。
create view j1_j
as
select jname,color,sum(qty)零件总数 from j,p,spj
where j.jno=spj.jno and p.pno =spj.pno group by j.jname,color select * from j1_j
select * from j1_j
实验结果:
1、定义如下视图:
①查询北京的供应商的编号、名称和城市。
②查询S1供应商的所有供应明细。
③查询各工程名称使用的各种颜色零件的个数。
2、数据控制:
①使用GRANT把对S表查询的权利授予WangLi。grant select
1
(四)
on s to wangli
②使用GRANT把对P表查询、插入、修改、删除的权利授予LiMing。
grant select,insert,update,delete on p to liming
③使用REVOKE把LiMing对P表插入、删除的权利回收。
revoke insert,delete on p
from liming cascade
(五)问题及解决:首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。 1、
create view j1_j
as
select jname,color,sum(qty) from j,p,spj
where j.jno=spj.jno and p.pno =spj.pno group by j.jname,color
//无列名
创建视图或函数失败,因为没有为列3 指定列名。需要改成sum(qty)零件总数。 2、使用GRANT把对S表查询的权利授予WangLi
应是:grant select
on s to wangli
而不是:grant select
on table s
to wangli
(六)思考题:实验内容中的哪些视图可以用来更新记录?
一般的,行列子集视图是可以更新的。
(七)实验总结:只看书不练习是学不到真是有用的sql语句的,但是在练习时有迷惑的地方还应该下去仔细看看书。
2