对视图的三层理解

第一层:

这是最简单的理解,学过视图的人都知道的:视图是一张虚拟的表,但可以通过视图去修改原表的数据

例如:有一张UserInfo的表

uname            upwd               usex

张三              zhangsan           1        

可以创建视图view_user

create view view_user as select * from UserInfo

如果执行update view_user set uname=‘aaa’    你会发现UserInfo表里的所有uname都变成了aaa



第二层:

进一步深层的理解视图:不是所有的视图都能修改的,有些视图是只读的。

例如:又有一张表:Sex

sexid              sexname

1                         男

2                         女

如果单纯查看UserInfo表,那显示张三的性别为1,所以要与Sex表关联一起查看,因此建立视图

create view view_user as select u.uname,u.upwd,s.sexname from userinfo as u,sex as s where u.usex=s.sexid

这时的视图view_user是两张表关联起来的,是只读的,不能修改了



第三层:

假设有一个商品表Merchandise,

Mid(商品编号)           modeid(格式编号)

54226782542              1

另有一张商品格式表Mode

mid(格式编号)、mname(格式名称)

       1             VCD

       2             DVD

查询商品的格式信息,需要关联查询

select   m.mid,mo.mid,mo.mname    from merchaidise as m,mode as mo where m.modeid=mo.mid

结果:

Mid(商品编号)           modeid(格式编号)        mname(格式名称)

54226782542              1                           VCD

查询成功

但你无法把上述的语句直接创建为视图,因为Mode表里的mid列和Merchandise表里的mid列冲突。

也许你会问:不是用m和mo把两个列分别开了吗,为什么不行?

答案就是不行,因为微软考虑到查视图时可以写where条件的,如果上述问题行得通的话,那执行:

select * from view_user where mid=1的时候,mid是商品编号呢,还是格式编号呢?

所以在建立多表连接的视图时,列不能重复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值