• 数据库视图View的使用


    一、视图的概念:

    概念:

    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

    首先明白几个概念:

    1.视图是一个虚拟表,其内容由查询定义。
    2.视图中的数据是由一张或多张表中的数据组成的。
    3.如果你改动了基本表,如果你的视图来源于这个基本表,那视图给你呈现的结果也会随之发生变化。

    作用: 

    * 简单性。看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
    * 安全性。通过视图用户只能查询和修改他们所能见到的数据。但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:
    使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
    * 逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。 

    二、视图语法:

    视图创建:

    CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_name
    AS
    SELECT查询
    [WITH READ ONLY CONSTRAINT]

    语法解析:
    1. OR REPLACE:如果视图已经存在,则替换旧视图。
    2. FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
    3. NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。
    4. WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

    示例:

    CREATE OR REPLACE VIEW afa_attach_fileinfo_view (ID,NAME,  FILESIZE,  CONTENTTYPE,  FILEPATH,  BIZID,  BIZTYPE,  CREATETIME,  CREATEBY,  VERSION,  FAGENIDCODE)
    AS
    select * from (select f.*,ab.fagenidcode
            from fab_bill_template t
            left join fab_agen_bill ab on ab.fbillid = t.fbillid
            left join fab_agen a on a.fagenidcode = ab.fagenidcode and a.fisfinal = 1
            left join fab_billbatch bb on t.fbillbatchid = bb.fid
            left join  afa_attach_fileinfo f on f.bizid = t.fid
    UNION ALL
    select f.*,fa.fagenidcode
             from FAB_AGEN_SEAL fa 
             left join afa_attach_fileinfo f on fa.fid=f.bizid);

    查询可用:

    select * from afa_attach_filestore_view
    where fagenIdCode IN  (
               select fagenidcode from fab_agen where flevelcode like (
                      select flevelcode from fab_agen where fagenidcode ='20340af2dc7741adbd58df214819d4e7'
               )||'%')

    如果是mysql数据,注意:

    以上sql可修改为:

    select *
      from afa_attach_filestore_view
     where fagenIdCode IN
           (select fagenidcode
              from fab_agen
             where flevelcode like concat(
                   (select flevelcode
                      from fab_agen
                     where fagenidcode = 'BE8EF91813BAA4D36FE1DFEF87C6EF07'),'%'));

    视图操作: 

    备注:以下操作,如果当前视图是单表的情况下,且不是只读的情况,这个时候基本表的数据也会修改、新增、删除。新增的时候要覆盖所有字段。 

    修改: 

    UPDATE afa_user_view SET user_name='视图' WHERE user_code='system'

    添加: 

    INSERT INTO afa_user_view VALUES('test','001'

    删除: 

    delete from afa_attach_filestore_view where id='cf446676ca0c4c49bd1a3f33a6b5f553';

     

  • 相关阅读:
    FreePbx
    ntpdate和date
    Linux系统/dev/mapper目录浅谈
    利用rsync做全平台备份
    windows 共享给 linux
    Linux、UNIX设置开机自动运行命令
    JNU周练1019
    JNU周练1013
    2013/7/30 JNU周练
    二叉树遍历
  • 原文地址:https://www.cnblogs.com/shawWey/p/9804238.html
Copyright © 2020-2023  润新知