数据库视图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';

 

 

转载于:https://www.cnblogs.com/shawWey/p/9804238.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库视图是一个虚拟的表,它的内容由查询定义。它是数据库中一个非常有用的工具,可以方便地将多个表中的数据组合在一起,并且可以根据需要进行筛选、排序、分组等操作。视图可以像表一样使用,但它们不存储数据,只是提供了一种方便的方式来访问和查询数据。 下面是创建和使用数据库视图的一些步骤: 1. 创建视图 创建视图可以使用 CREATE VIEW 语句,语法如下: ``` CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition; ``` 其中 `view_name` 是视图的名称,`column1, column2, ...` 是要包含在视图中的列名,`table_name` 是要查询的表名,`condition` 是查询条件。例如,以下代码将创建一个名为 `customer_view` 的视图,该视图包含 `customers` 表中的 `name` 和 `email` 列: ``` CREATE VIEW customer_view AS SELECT name, email FROM customers; ``` 2. 使用视图查询数据 创建视图后,可以像表一样使用它来执行查询操作。例如,以下代码将查询 `customer_view` 视图中的所有记录: ``` SELECT * FROM customer_view; ``` 也可以在查询中使用 WHERE、ORDER BY、GROUP BY 等子句来筛选、排序、分组等操作。例如,以下代码将查询 `customer_view` 视图中 `email` 列中包含 "gmail.com" 的记录: ``` SELECT * FROM customer_view WHERE email LIKE '%gmail.com'; ``` 3. 更新视图数据 视图可以像表一样更新数据,但要注意以下限制: - 视图只能更新一个表中的数据。 - 视图不能包含 GROUP BY、HAVING、UNION、UNION ALL 或子查询。 - 视图中不能包含计算列。 例如,以下代码将更新 `customer_view` 视图中 `email` 列中包含 "gmail.com" 的记录的 `name` 列值为 "John": ``` UPDATE customer_view SET name = 'John' WHERE email LIKE '%gmail.com'; ``` 总之,数据库视图是一个非常有用的工具,可以方便地查询和操作数据。但是,要注意视图的限制和注意事项,以免出现意外情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值