精华内容
下载资源
问答
  • MySQL数据库视图:视图定义、创建视图、修改视图

    万次阅读 多人点赞 2017-03-20 11:54:15
    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义视图不直接存储数据,不知真正的表。 关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询...

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

    关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能。

    0 视图相关的MySQL指令

    操作指令代码
    创建视图CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
    使用视图当成表使用就好
    修改视图CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
    查看数据库已有视图>SHOW TABLES [like...];(可以使用模糊查找)
    查看视图详情DESC 视图名或者SHOW FIELDS FROM 视图名
    视图条件限制[WITH CHECK OPTION]

    1 视图

    百度百科定义了什么是视图,但是对缺乏相关知识的人可能还是难以理解或者只有一个比较抽象的概念,笔者举个例子来解释下什么是视图。

    朕想要了解皇宫的国库的相关情况,想知道酒窖有什么酒,剩多少,窖藏多少年,于是派最信任的高公公去清点,高公公去国库清点后报给了朕;朕又想知道藏书情况,于是又派高公公去清点并回来报告给朕,又想知道金银珠宝如何,又派高公公清点。。。过一段时间又想知道藏书情况,高公公还得重新再去清点,皇上问一次,高公公就得跑一次路。

    后来皇上觉得高公公不容易,就成立了国库管理部门,小邓子负责酒窖,小卓子负责藏书,而小六子负责金库的清点。。。后来皇上每次想了解国库就直接问话负责人,负责人就按照职责要求进行汇报。
    视图

    安排专人管理后,每次皇上想要了解国库情况,就不必让高公公每次都跑一趟,而是指定的人员按照指定的任务完成指定的汇报工作就可以了。

    和数据库相对应,每次进行查询工作,都需要编写查询代码进行查询;而视图的作用就是不必每次都重新编写查询的SQL代码,而是通过视图直接查询即可。因此:

    视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。

    比如,我们希望从前文提到的四张表,order_baisc,order_details,user和product中查找所有记录,需要写入代码指令:
    查询
    想再次查询这几个表中uid为u0001的用户的记录,有需要键入一次操作指令:
    查询
    也就是说,每次查询都得重新键入查询指令SQL代码,这种费时费力的体力活,对于时间就是生命的你我来说,是不划算的。所以借助视图,来执行相同或相似的查询。

    2 创建视图

    2.1 创建视图create view
    创建视图的代码为:

    >CREATE VIEW 视图名(列1,列2...)
     AS SELECT (列1,列2...)
     FROM ...;

    可以看到,创建视图和查询相比,增加了前面的CREATE VIEW 视图名 AS

    2.2 视图运用

    使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。

    eg:创建order_baisc,order_details,user和product的查询视图,并通过视图查找uid为u0001的记录:
    创建视图

    2.3 修改视图CREATE OR REPLACE VIEW

    修改和创建视图可以使用代码:

    CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];

    eg:
    修改视图

    2.4 查看视图
    (1)查看数据库中有哪些视图 show tables
    前面提到,视图就是虚拟的表,因此,查看视图的方法和查看表的方法是一样的:

    >SHOW TABLES;

    查看视图

    通过show tables;反馈得到所有的表和视图。同样的,我们可以通过模糊检索的方式专门查看视图,这个时候,视图的命令统一采用 v_ v _ 视 图 名 的优势就体现出来了。
    (2)查看视图详情
    查看视图详情的方法有两种,一种是和查看表详情一样使用desc 视图名,另外一种方法是show fields from 视图名

    >DESC 视图名;
    或者
    >SHOW FIELDS FROM 视图名;

    查看视图详情

    两种方法得到的详情都是一毛一样的。

    3 视图与数据变更

    3.1 表格数据变更
    将表product中的数据进行更新,在通过视图检索:

    视图与数据变更

    可以看到表格数据变化后,在通过视图检索,得到的结果也同步发生了变化,因此,在此证明了:

    视图不是表,不保存数据,知识一张虚拟表;

    3.2 通过视图变更数据

    • (1)插入数据
    >INSERT INTO v_order(pid,pname,price) VALUES('p010','柴油','34');

    在此查询视图,发现插入了数据。

    视图变更数据

    • (2)跨表插入数据
      通过上图,我们可以看到,跨表插入数据系统反馈报错,提示不能修改超过一个表的数据。

    因此,可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。

    • (3)WITH CHECK OPTION
      如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。

      eg:对表product创建一个单价超过3000的视图,并加上“WITH CHECK OPTION”,之后插入一个价格为42的记录:

      “WITH CHECK OPTION”

      可以看到系统提示错误CHECK OPTION FAILED。因为视图限制了价格要高于3000.
      后面再次尝试了不加“WITH CHECK OPTION”的视图,后者可以成功插入。

      同样的,在不加“WITH CHECK OPTION”的情况下,通过视图修改记录,也可以成功执行:
      修改记录

    通过视图修改,可能导致数据无故消失,因此:

    没有特殊的理由,建议加上“WITH CHECK OPTION”命令。

    注意点:
    1. 视图不是表,不直接存储数据,是一张虚拟的表;
    2. 一般情况下,在创建有条件限制的视图时,加上“WITH CHECK OPTION”命令。

    展开全文
  • 视图定义及其优点

    2018-06-21 22:48:44
    它本身不独立存储在数据库中,也就是说数据库中只存放视图定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个续表。优点: 1.视图能够简化用户的操作; 2.视图使用户能以多种角度...

    视图的定义:

        视图是从基本表或其他视图中导出来的表。它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个续表。

    优点:

        1.视图能够简化用户的操作;

        2.视图使用户能以多种角度看待同一数据;

        3.视图对重构数据库提供了一定程度的逻辑独立性;

        4.视图能够对机密数据提供安全保护.

    展开全文
  • 例如,如果更改在视图定义中引用的列的宽度,那么在刷新元数据之前新的宽度可能不会生效。在这个技巧中,会演示在视图定义中引用 的依赖对象修改后,如何刷新视图的元数据: USE AdventureWorks GO EXEC sp_...

        当视图引用的表对象修改后,视图的元数据可能就过时了。例如,如果更改在视图定义中引用的列的宽度,那么在刷新元数据之前新的宽度可能不会生效。在这个技巧中,会演示在视图定义中引用

    的依赖对象修改后,如何刷新视图的元数据:

    USE AdventureWorks
    GO
    
    EXEC sp_refreshview 'dbo.v_product_TransactionHistory'

        也可以使用系统存储过程sp_refreshsqlmodule,它不仅仅可以使用在视图上,也可以使用到存储过程、触发器和用户定义函数上:

    USE AdventureWorks
    GO
    
    EXEC sys.sp_refreshsqlmodule @name='dbo.v_product_TransactionHistory'

          如果视图的SELECT查询定义引用的基础对象修改了,可以使用sp_refrashview或sys.refreshsqlmodule存储过程来刷新视图的元数据。这个系统存储过程只接受一个参数,那就是视图的名称。

    展开全文
  • Trafodion 查看视图定义

    2017-12-13 11:58:05
    本文主要介绍如何在Trafodion中创建视图,并查询视图定义。可能大家都已经了解什么是视图,但这里我还是要稍微提一下数据库中视图的概念。视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与...

    Trafodion作为一款SQL on Hadoop的数据库引擎,支持标准的SQL功能,支持增删查改DML语句,也支持建表、建索引、建视图等DDL语句。本文主要介绍如何在Trafodion中创建视图,并查询视图的定义。

    可能大家都已经了解什么是视图,但这里我还是要稍微提一下数据库中视图的概念。视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

    当然,这里我们讨论的视图是数据库中的普通视图,在某些关系型数据库如Oracle中,提供了另外一种视图–即物化视图。物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。物化视图可以基于表查询,视图和其它的物化视图。通常情况下,在复制环境下,物化视图被称为主表,在数据仓库中称为明细表。

    因此,从上面的介绍中我们知道,普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作。

    现在继续回到Trafodion的视图中来,由于目前Trafodion尚没有物化视图的概念,因此后面我们讨论的Trafodion视图都属于普通视图,即不存储任何数据,只有元数据信息。实际上,在Trafodion中,任何对象都有对应的元数据信息,元数据信息存储在单独的Schema “MD“中,通过get tables我们可以看到有哪些元数据表。

    >>get tables in schema trafodion."_MD_";
    
    Tables in Schema TRAFODION._MD_
    ===============================
    
    AUTHS
    COLUMNS
    DEFAULTS
    INDEXES
    KEYS
    LIBRARIES
    LIBRARIES_USAGE
    OBJECTS
    REF_CONSTRAINTS
    ROUTINES
    SEQ_GEN
    TABLES
    TABLE_CONSTRAINTS
    TEXT
    UNIQUE_REF_CONSTR_USAGE
    VERSIONS
    VIEWS
    VIEWS_USAGE

    如果想从元数据信息中查看视图的定义,这涉及到上面列表中的三张表,VIEWS、OBJECTS和TEXT。第一个视图有一个唯一的标识VIEW_ID存储在VIEWS中,每个VIEW_ID对应OBJECTS表中的OBJECT_ID,每个OBJECT_ID在TEXT中对应一个TEXT_ID。另外,OBJECTS表中包含OBJECT_NAME字段,可以通过OBJECT_NAME字段查找特定名称的VIEW_ID,通过VIEW_ID,可以在TEXT表中查看到对应视图的视图定义。因而,我们可以使用以下语句来查看某一个视图名称对应的视图定义,

    SQL>select a.* from "_MD_".text a, "_MD_".views b,"_MD_".objects c where a.text_uid = b.view_uid and b.view_uid = c.object_uid and c.object_name = 'TEST2_V' and c.schema_name = 'SEABASE';
    
    TEXT_UID             TEXT_TYPE   SUB_ID      SEQ_NUM     FLAGS                TEXT                                                                                                                     
    -------------------- ----------- ----------- ----------- -------------------- --------------------------------------------------------------------------------------------------------------------------------
     4574677199916640811           0           0           0                    0 CREATE VIEW TRAFODION.SEABASE.TEST2_V AS SELECT TRAFODION.SEABASE.TEST2.A FROM TRAFODION.SEABASE.TEST2                   
     4574677199916640811           8           0           0                    0 viewUID: 4574677199916640811 viewCol: 0 refUID: 4606766110394796238 refCol: 1 refType: 1;                                
    
    --- 2 row(s) selected.

    另外,Trafodion提供两个命令可以查询视图的定义,即SHOWDDL和INVOKE,让我们通过下面例子查看视图的定义吧,

    QL>showddl seabase.test2_v;
    
    CREATE VIEW TRAFODION.SEABASE.TEST2_V AS
      SELECT TRAFODION.SEABASE.TEST2.A FROM TRAFODION.SEABASE.TEST2 ;
    
    --- SQL operation complete.
    
    SQL>invoke seabase.test2_v;
    
    -- Definition of Trafodion view TRAFODION.SEABASE.TEST2_V
    -- Definition current  Wed Dec 13 10:39:49 2017
    
      (
        A                                VARCHAR(10) CHARACTER SET ISO88591 COLLATE
          DEFAULT DEFAULT NULL SERIALIZED
      )
    
    --- SQL operation complete.
    展开全文
  • 行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。——百度百科 关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接...
  • ¨视图提供了存储定义的查询语句作为数据库中的对象以备以后使用的能力; ¨视图只是一种逻辑对象,并不是物理对象,因为视图不占物理存储空间; ¨在视图中被查询的表称为视图的基表; ¨视图的内容包括:基表...
  • 原文:SQL Server查看视图定义总结 在SQL Server中如何查看数据库视图的定义呢? 其实官方文档已经有一个较详细的总结了,这里在官方文档的基础上,我们再深入展开分析一下,例如如何获取系统视图的定义。知其然知其...
  • 数据库管理视图:查看视图定义

    千次阅读 2016-06-02 16:45:57
    1.连接视图: 之前在scott模式下,创建dept表与emp表相互关联的视图: SQL> create or replace view emp_view_union as 2 select d.dname,d.loc,e.empno,e.ename 3 from emp e,dept d 4 where e.deptno...
  • 视图定义

    2015-11-05 22:26:25
    视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态...
  • 1.视图定义视图存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图...
  • 视图定义、作用、语法及操作

    千次阅读 2013-05-07 18:58:02
     视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候, 只是重新执行SQL.  视图是从一个或多个实际表中获得的,这些...
  • 但是视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并在引用视图时动态生成。  对其中所引用的基础表来说,视图的作用类似于筛选。  定义视图的筛选可以来当自当前或...
  • 静态视图 动态视图 区别 定义

    千次阅读 2011-08-27 11:22:55
    常用的DBA_视图 视图 说明 DBA_CONS_COLUMNS 约束定义中关于用户可访问的列的描述 DBA_CONSTRAINTS 表上的约束的定义 DBA_DATA_FILE
  • 视图定义3. 视图更新 查询使用的数据库文件下载 1. 视图介绍 虚关系 并不预先计算并存储关系,而是在使用虚关系时才通过执行查询被计算出来 (概念上包含查询的结果) 任何不是逻辑模型的一部分,但作为虚关系对...
  • 在创建视图或者是存储过程的时候,是需要定义安全验证方式的(也就是安全性SQL SECURITY),其值可以为definer或invoker,表示在执行过程中,使用谁的权限来执行。 definer:由definer(定义者)指定的用户的权限来执行 ...
  • 视图特点与定义

    千次阅读 2014-04-13 10:58:12
    但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。     对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自...
  • 文章目录 第六章 SQL定义和使用视图创建一个视图管理门户创建视图界面视图和相应的类修改视图可更新的视图WITH CHECK选项只读视图查看ID:%VIDList视图属性列出视图依赖 第六章 SQL定义和使用视图 视图是一种虚拟...
  • 视图在SQL中只存储其由基本表导出视图所需要的公式,即由基本表产生视图的映像信息,其数据并不存储,而是在运行过程中动态产生与维护的。 对视图数据的更改最终要反映在对基本表的更改上。 视图定义 视图需要“先...
  • 如何在ASP.NET Boilerplate中创建自定义目录并在存储库中使用存储过程,视图和用户定义的函数
  • 今天向大家介绍Sql server 中的 sys.all_sql_modules 视图, 它里面存储了函数,表,存储过程,视图等的定义语句。介绍这个视图之前先介绍下 sys.all_objects 视图,这个视图视图里有所有对象的名字(函数名,表名,...
  • Oracle查看表、视图、索引、存储过程和触发器的定义的方法Oracle查看表、视图、索引、存储过程和触发器的定义的方法查看表的定义:set long 999999select dbms_metadata.get_ddl(‘TABLE’,upper(‘&table_name...
  • 由于物化视图定义为on commit导致update更新基表慢的解决方案以下是模拟和解决测试过程:(模拟update慢的过程)1、首先基于基表创建物化视图日志:create materialized view log on scott.emp with rowid;2、首先基于...
  • 做MySQL数据库用户权限规范的时候,将原来业务帐号'user'@'%'修改为'user'@'192.168.1.%'时,忽然发现业务系统部分业务报404错误,经排查,发现是因为报错的业务在调用数据库时,使用了视图,而视图定义者是原来的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 263,796
精华内容 105,518
关键字:

储存的是视图的定义