用户权限管理,视图

用户权限管理,视图

   实验目的:熟悉SQL语言有关视图的操作,能够熟练使用SQL语句来创建需要的视图,定义数据库外模式,并能使用所创建的视图实现数据管理。
   实验内容:
   1. 实验任务   环境:PHPStudy   针对给定的数据库,以及相应的应用需求,创建视图和带with check option的视图,并验证视图with check option选项的有效性。理解和掌握视图消解执行原理,掌握可更新视图和不可更新视图的区别。
   2. 实验步骤
   (1) 创建视图:V_DLMU_PartSupp1,创建一个“海大汽配”供应商供应的零件视图V_DLMU_PartSupp1,要求列出供应零件的编号,零件名称,可用名称,可用数量,零售价格,供应价格和备注等信息。
   (2) 创建视图:V_CustAvgOrder,按顾客统计平均每个订单的购买金额和零件数量,要求输出顾客编号,姓名,平均购买金额和平均购买零件的数量。
   (3) 创建视图:V_DLMU_PartSupp2,使用with check option,创建一个“海大汽配”供应商供应的零件视图V_DLMU_PartSupp2,要求列出供应零件的编号,可用数量,供应价格等信息。然后通过该视图分别,增加,删除和修改一条“海大汽配”零件供应记录,验证with check option是否起作用。
   (4) 可更新的视图(行列子集视图)创建一个“海大汽配”供应商供应的零件视图V_DLMU_PartSupp3,要求列出供应零件的编号,可用数量,供应价格等信息。然后通过该视图分别增加,删除和修改一条“海大汽配”零件供应记录,验证该视图是否是可更新的,并比较上述“(3)创建视图,V_DLMU_PartSupp2”实验任务与本任务结果有何异同。
   (5) 不可更新的视图:(2)中创建的视图是可更新的吗?通过更新语句加以验证,并说明原因。删除视图(restrict/cascade):创建顾客订购零件明细视图V_CustOrd,要求列出顾客编号,姓名,购买零件数,金额,然后在该视图的基础上,再创建与(2)的视图一样结构的视图V_CustAvgOrder1,然后使用restrict选项删除视图V_CustOrd,观察现象并检查V_CustAvgOrder1是否存在,解释原因。
   程序:phpStudy.exe;mysql 5.7
   
   #1.创建视图:V_DLMU_PartSupp1#
create view V_DLMU_PartSupp1 as
       select P.partkey,P.name,PS.availqty,P.retailprice,PS.supplycost,P.comment
       from Part P,PartSupp PS,Supplier S
       where P.partkey=PS.partkey and S.suppkey=PS.suppkey and S.name='海大汽配';
       show create view V_DLMU_PartSupp1;
#2.创建视图:V_CustAvgOrder 使用group by语句#
create view V_CustAvgOrder(custkey,cname,avgprice,avgquantity) as
select C.custkey,MAX(C.name),AVG(O.totalprice),AVG(L.quantity)
from Customer C,Orders O,Lineitem L
where C.custkey=O.custkey and L.orderskey= O.orderskey
group by C.custkey;

#5. 2视图V_CustAvgOrder不可更新,不可插入,没有授权插入权限#

insert into V_CustAvgOrder 
values(100000,null,20,2000);

#3.创建视图:V_DLMU_PartSupp2,使用check option语句#

create view V_DLMU_PartSupp2 
as
select partkey,suppkey,availqty,supplycost
from PartSupp
where suppkey=(   		
	select suppkey		
	from Supplier		
	where name='海大汽配')
with check option;

#V_DLMU_PartSupp3的插入,修改,删除#

insert into V_DLMU_PartSupp2 values(58889,5048,704,77760);
update V_DLMU_PartSupp2 
set supplycost=12
where suppkey=58889;
delete from V_DLMU_PartSupp2 
where suppkey=58889;

#4.可更新的视图(行列子集视图)创建V_DLMU_PartSupp3#

create view V_DLMU_PartSupp3 
as
select partkey,suppkey,availqty,supplycost
from PartSupp
where suppkey=(   		
	select suppkey		
	from Supplier		
	where name='海大汽配');

#V_DLMU_PartSupp3的插入,修改,删除#

insert into V_DLMU_PartSupp3 values(58889,5048,704,77760);

describe view V_DLMU_PartSupp3; 

update V_DLMU_PartSupp3
set supplycost=12
where suppkey=58889; 

delete from V_DLMU_PartSupp3
where suppkey=58889;

#6.删除视图(restrict/cascade)#

create view V_CustOrd(custkey,cname,qty,extprice) 
as
select C.custkey,C.name,L.quantity,L.extendedprice
from Customer C,Orders O,Lineitem L
where C.custkey=O.custkey and O.orderskey= L.orderskey;

create view V_CustAvgOrder1(custkey,cname,avgprice,avgquantity) 
as
select custkey,MAX(cname),AVG(qty),AVG(extprice)
from V_CustOrdgroup by custkey;

drop view V_CustOrd restrict; 

drop view V_CustOrd cascade;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值