精华内容
下载资源
问答
  • 对视图的修改最终
    千次阅读
    2020-03-10 10:42:23

    mysql中可更新视图必须满足一定的条件,参见:http://blog.csdn.net/yangkai_hudong/article/details/7632085

    要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。

    如果视图包含下述结构中的任何一种,那么它就是不可更新的:

    (1)聚合函数;

    (2)DISTINCT关键字;

    (3)GROUP BY子句;

    (4)ORDER BY子句;

    (5)HAVING子句;

    (6)UNION运算符;

    (7)位于选择列表中的子查询;

    (8)FROM子句中包含多个表;

    (9)SELECT语句中引用了不可更新视图;

    (10)WHERE子句中的子查询,引用FROM子句中的表;

    (11)ALGORITHM 选项指定为TEMPTABLE(使用临时表总会使视图成为不可更新的)。

    更多相关内容
  • 这些是JIRA的修改最终将扩展到所有董事会页面。 当前,敏捷板视图是唯一经过完全修改视图,任务板,仪表板和时间表都在不断改进。 所有这些都是通过时尚CSS使用CSS,以及通过用户脚本插件使用JS完成的。 这已...
  • PostgreSQL 修改视图

    2021-05-07 03:36:09
    最近发现PostgreSQL(create or replace) 修改视图有很多的限制,不像SQL Server和Oracle那样可以随意修改。错误提示修改视图原有字段ERROR: cannot change name of view column "user_id" to "?column?"删除视图原有...

    最近发现PostgreSQL(create or replace) 修改视图有很多的限制,不像SQL Server和Oracle那样可以随意修改。

    错误提示

    修改视图原有字段

    ERROR:  cannot change name of view column "user_id" to "?column?"

    删除视图原有字段

    ERROR:  cannot drop columns from view

    百度一番找到如下原因,内容原文

    究其原因,是PostgreSQL虽然支持CREATE OR REPLACE VIEW语义,却有着容易让人忽略的重要限制(Oracle没有该限制),其官方文档这样描述:

    f1d680eb43c71bf0e9397ea227e1f85a.png

    即:更新视图只能在最后增加字段,不能改字段名、不能删除字段、也不能在中间增加字段,这在项目开发阶段是不可忍受的。虽然PostgreSQL提供了ALTER VIEW的语句,但怎么也不如直接放在CREATE VIEW里那样直观。

    因此,建议脚本放弃Oracle风格的CREATE OR REPLACE VIEW形式,而改用MySQL风格的先DROP VIEW再CREATE VIEW的形式。不过,如果VIEW间存在层次引用关系,如视图A建立在视图B之上,则CREATE时必须先建B后建A,DROP时必须先删A再删B。当层次引用较多或变化较频繁时,调整顺序又是件麻烦事。

    为降低复杂性,脚本最终只考虑CREATE VIEW时的顺序,而在DROP VIEW时,综合使用IF EXISTS 和CASCADE选项,如下所示:

    DROP VIEW IF EXISTS B CASCADE;CREATE VIEW B AS...;DROP VIEW IF EXISTS A CASCADE;CREATE VIEW A AS...;

    展开全文
  • Mysql之视图的创建、修改、查看、删除

    视图

    一、视图的定义

    MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。

    数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中。使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。

    视图可以从原有的表上选取对用户有用的信息,那些对用户没用,或者用户没有权限了解的信息,都可以直接屏蔽掉,作用类似于筛选。这样做既使应用简单化,也保证了系统的安全。

    视图并不同于数据表,它们的区别在于以下几点:

    • 视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。
    • 存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。
    • 视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。
    • 视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。
    • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。
    • 视图的建立和删除只影响视图本身,不影响对应的基本表。

    二、视图的优点

    视图与表在本质上虽然不相同,但视图经过定义以后,结构形式和表一样,可以进行查询、修改、更新和删除等操作。同时,视图具有如下优点:

    1) 定制用户数据,聚焦特定的数据

    在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。

    例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。

    2) 简化数据操作

    在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。

    3) 提高数据的安全性

    视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。

    4) 共享所需数据

    通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。

    5) 更改数据格式

    通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。

    6) 重用 SQL 语句

    视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。

    要注意区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源均建立在真实表的基础上。

    使用视图的时候,还应该注意以下几点:

    • 创建视图需要足够的访问权限。
    • 创建视图的数目没有限制。
    • 视图可以嵌套,即从其他视图中检索数据的查询来创建视图。
    • 视图不能索引,也不能有关联的触发器、默认值或规则。
    • 视图可以和表一起使用。
    • 视图不包含数据,所以每次使用视图时,都必须执行查询中所需的任何一个检索操作。如果用多个连接和过滤条件创建了复杂的视图或嵌套了视图,可能会发现系统运行性能下降得十分严重。因此,在部署大量视图应用时,应该进行系统测试。

    提示:ORDER BY 子句可以用在视图中,但若该视图检索数据的 SELECT 语句中也含有 ORDER BY 子句,则该视图中的 ORDER BY 子句将被覆盖。

    三、创建视图

    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]  
      [SQL SECURITY { DEFINER | INVOKER }]
        VIEW view_name [(column_list)]
        AS select_statement
       [WITH [CASCADED | LOCAL] CHECK OPTION]
    1)OR REPLACE:表示替换已有视图
    
    2)ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表
        
        ①UNDEFINED:MySQL将自动选择所要使用的算法
     
      ②MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
     
      ③TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句
     
    缺省ALGORITHM选项等同于ALGORITHM = UNDEFINED
    
    3)DEFINER选项:指出谁是视图的创建者或定义者
     
      ①definer= '用户名'@'登录主机'
     
      ②如果不指定该选项,则创建视图的用户就是定义者,指定关键字CURRENT_USER(当前用户)和不指定该选项效果相同
    
    4)SQL SECURITY选项:要查询一个视图,首先必须要具有对视图的select权限。
     
      但是,如果同一个用户对于视图所访问的表没有select权限,那会怎么样?
     
    SQL SECURITY选项决定执行的结果:
     
      ①SQL SECURITY DEFINER:定义(创建)视图的用户必须对视图所访问的表具有select权限,也就是说将来其他用户访问表的时候以定义者的身份,此时其他用户并没有访问权限。
     
      ②SQL SECURITY INVOKER:访问视图的用户必须对视图所访问的表具有select权限。
     
    缺省SQL SECURITY选项等同于SQL SECURITY DEFINER
    5)select_statement:表示select语句
    
    6)[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内
    
      cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件
    
      local表示更新视图的时候,要满足该视图定义的一个条件即可
    
    TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性 
    

    四、查看视图

    1.使用show create view语句查看视图信息

    show create view 视图名称
    

    2.视图一旦创建完毕,就可以像一个普通表那样使用,视图主要用来查询

    mysql> select * from view_name;
    

    3.有关视图的信息记录在information_schema数据库中的views表中

     select * from information_schema.views  where TABLE_NAME='v_F_players'\G;
    

    五、修改视图

    1、CREATE OR REPLACE VIEW语句修改视图

    基本格式:

    create or replace view view_name as select语句;
    

    在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图

    2、ALTER语句修改视图

    ALTER
        [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]
        [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]
    

    注意:修改视图是指修改数据库中已存在的表的定义,当基表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致

    3、DML操作(insert、update、delete)更新视图

    因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中

    ​ 不是所有的视图都可以做DML操作。有下列内容之一,视图不能做DML操作:

    ①select子句中包含distinct

    ②select子句中包含组函数

    ③select语句中包含group by子句

    ④select语句中包含order by子句

    ⑤select语句中包含union 、union all等集合运算符

    ⑥where子句中包含相关子查询

    ⑦from子句中包含多个表

    ⑧如果视图中有计算列,则不能更新

    ⑨如果基表中有某个具有非空约束的列未出现在视图定义中,则不能做insert操作

    六、删除视图

    删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表:

    DROP VIEW [IF EXISTS]   view_name ,[view_name] ;
    

    如果视图不存在,则抛出异常;使用IF EXISTS选项使得删除不存在的视图时不抛出异常。

    展开全文
  • 也可以在视图之上再定义新的视图,但对视图的更新(增,删,改)操作则有一定的限制。 1.1.1 定义视图 1,建立视图 sql语言用create view 命令建立视图,其一般格式为 create view <视图名> [(<列名>[,<...

    视图
    视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。视图一经定义,就可以和基本表一样被查询,被删除。也可以在视图之上再定义新的视图,但对视图的更新(增,删,改)操作则有一定的限制。

    1.1.1 定义视图
    1,建立视图
    sql语言用create view 命令建立视图,其一般格式为
    create view <视图名> [(<列名>[,<列名>]…)] as <子查询> [with check option]

    注:with check option 表示对视图进行update,insert和delete操作时要保证更新,插入或删除的行满足视图定义中谓词条件(即子查询中的条件表达式)。

    1.1.2 查询视图
    关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表,视图等是否存在。如果存在,则从数据字典中取出视图的定义,把定义的子查询和用户的查询结合起来,转换成等价的基本表的查询,然后再执行修正了的查询。这一转换过程称为试图消解。

    1.1.3 删除视图
    该语句的格式为
    drop view <视图名> [cascade]|[restrict];
    视图删除后视图的定义将从数据词典中删除。如果该视图上还导出了其他视图,则使用cascade级联删除语句把该视图和由他导出的所有视图都一起删除;restrict会进行判断,如果该视图还导出了其它视图,则会拒绝删除,报错,否则可以成功执行。

    1.1.4 更新视图
    更新视图是指通过视图来插入(insert),删除(delete)和修改(update)数据。
    由于视图是不实际存储数据的虚表,因此对视图的更行最终要转换为对基本表的更行。一般地,行列子集视图是可更新的。
    行列子集视图是可以更新的,如在视图上对学生姓名进行更改;非行列子集视图是不可以更改的,在原来的基础表中使用了sum等函数定义的视图,此视图的此值是无法更新的。
    小重点:
    一个不允许更新的视图上定义的视图也是不允许更新。应该指出的是,不可更新的视图与不允许更新的视图是两个不同的概念。

    1.1.5 视图的作用
    1,视图能简化用户的操作
    2,能使用户多角度看待同一问题
    3,为数据库的重构提供一定的逻辑独立性支持
    4,视图能够对机密数据提供安全保护
    5,适当的利用视图可以更清晰地表达查询

    展开全文
  • MySQL中的数据类型,列选项,视图

    千次阅读 2021-01-18 23:26:58
    from 表名 通过视图修改表 此方法不常用。 例: 从视图中cplayers中删除联盟会员号码为6524的球员 。 DELETE FROM cplayers WHERE leagueno=‘6524’; 因为视图本身没有数据,因此视图进行的dml操作最终都体现在...
  • MySQL更新视图

    千次阅读 2021-04-20 14:37:43
    更新视图是指通过视图,来更新、插入、删除基本表中的数据因为,视图是一个虚拟表,其中没有数据,所以,当通过视图更新数据时,其实,是在更新基本表中的数据,如果对视图中的数据进行增加,或者删除操作时,实际上...
  • 3.7视图

    千次阅读 2019-11-03 12:43:26
    视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本...也可以在一个视图之上再定义新的视图,但对视图的更...
  • 在人类求知的路上,会形成求知的不同的态度,比如好读书,不求甚解;又例如要知其然知其所以然,追本溯源等等,人类在满足自己好奇心的同时,掺杂着复杂的人性。前者“懒惰”,后者“贪婪”。人类总能逻辑自洽的...
  • 2月9号的时候分享了篇Oracle针对大表在线修改的脚本,主要是使用Oracle自带的在线重定义功能,对于表结构的修改,非常的方便,强列推荐使用。脚本下载地址:oracle大表字段类型修改在线重定义脚本.txt最近在客户现场...
  • MySQL数据库视图

    千次阅读 2021-02-02 14:05:09
    1. 修改、查询、删除记录时...可以根据他们的不同需求,在物理的数据库上定义他们数据库所要求的数据结构,这种根据用户观点所定义的数据结构就是视图视图与表(有时为与视图区别,也称表为基本表――Base Tabl...
  • Oracle-视图

    千次阅读 2020-12-29 23:15:24
    Oracle-视图在项目开发中,有时候会用到多表查询,有很多种方法,比如关联,比如视图,但对于查询来说,视图查询是最快的,如果你的数据库的字段信息很多,那查询就得整表查,比如两表查询,我们就可以把要的字段...
  • MYSQL基础之 视图

    千次阅读 2022-01-26 13:37:23
    概念 什么是视图?...这样可以针对不同的用户定制不同的查询视图,这样让同样的数据不同的人呈现不同的假表数据,其实保证了数据的安全。 视图时一种虚拟表,本身是不具有数据,占用很少的内存空间,是
  • 主流数据库之视图

    多人点赞 热门讨论 2022-04-11 23:15:49
    文章目录 目录 文章目录 前言 ...CREATE OR REPLACE VIEW语句修改视图 使用ALTER语句修改视图 视图操作 使用SQL语句更新视图 基本表数据新增后视图自动更新 删除视图中的数据 删除视图 .
  • 数据库视图 sql

    千次阅读 2021-01-28 08:08:21
    视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视...文章萌萌怪兽2020-02-...
  • MySQL索引及视图

    2022-04-03 12:24:17
    文章目录MySQL索引及视图索引设计索引的原则索引分类创建索引删除索引索引数据查询的影响视图视图的作用创建视图使用视图检查视图查看视图的定义删除视图 索引 索引是一种特殊的文件(INNODB数据表上的索引是表空间...
  • SQL Server 数据库之视图

    千次阅读 2022-03-17 17:07:08
    MySQL 数据库之视图 视图的增删查改操作介绍
  • oracle视图详解

    千次阅读 2021-01-28 10:46:15
    Oracle视图详解一.视图的定义视图(view),也称虚表,不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候,只是重新执行SQL。视图是从一个或多个...
  • MySQL视图创建与管理(实验五)

    千次阅读 2019-12-12 20:00:05
    1、新建一个视图V1记录1998年出生的女生信息,包括学号,姓名,性别,出生日期,并且要求透过该视图进行的更新操作只涉及1998年出生的女生。 提示:更新操作只涉及1998年出生的女生, 即检查视图!with check optin ...
  • 对视图修改:单表视图一般用于查询和修改,会改变基本表的数据, 多表视图一般用于查询,不会改变基本表的数据。 –创建视图– create or replace view v_student as select * from student; –从视图中检索数据–...
  • 点击查看如何使得打开word文件显示最终修改状态具体信息答:工具/材料:word文档 1.找到桌面上的word文档,并点击打开它。 2.进入word文档之后,点击上面导航栏里面的审阅选项。 3.在审阅栏目下找到更改工具并点击...
  • 视图的定义与操作

    千次阅读 2021-05-25 22:05:29
    2、掌握修改视图的方法 3、熟悉视图更新与基本表更新的区别与联系 4、认识视图的作用 二、实验环境 Windows10+SQL Sever 2008 三、实验内容 对应HRM 数据库,参照前面实验中完成的查询,按如下要求自行设计视图: ...
  • Mysql视图详解

    2022-02-04 21:39:07
    Mysql视图详解 ...1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,用户来说已经是过滤好的复合条件的结果集。 2)安全:使用视图的用户只能访问他们被允许查询的结
  • 视图-数据库习题

    千次阅读 2021-11-29 22:09:46
    SQL语言中,删除一个视图的命令是( )。 A. delete view B. drop view C. clear view D. remove view 正确答案: B 数据定义语言需要两个关键字,第一个是动词,第二个是名词,表示对象类型。 SQL语言中,创建...
  • 视图

    2016-08-08 12:41:06
    视图的定义、查询、更新和作用
  • 【数据库学习笔记】Day05 - 视图(View) 1.1 视图的概念: 视图:由基本表构成的虚表(满足用户需求的表结构)。数据库中只存放视图的定义,而不存放视图对应的数据。基本表中的数据发生变化时,从视图中查询出来的...
  • 数据库的视图

    2020-09-22 20:00:52
    数据库的视图 一、什么是视图视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。 视图是原始数据库数据的一种变换,是查看表中数据的另外一种...
  • Hive之——视图

    千次阅读 2019-03-10 22:03:52
    转载请注明出处:... 使用视图降低查询复杂度 例如:嵌套查询: from ( select * from people join cart on(cart.pepople_id = people.id) where firstname = 'join' )a select a...
  • oracle中的视图详解

    2021-02-27 22:04:09
    视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束)2.视图的存储与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,477
精华内容 56,990
热门标签
关键字:

对视图的修改最终