精华内容
下载资源
问答
  • 2021-10-24 17:05:07

    定义视图

    建立视图

    SQL语言用CREATE VIEW命令建立视图,其中的格式如下

    CREATE VIEW <视图名> [(<列名>[,<列名>]]
    AS <子查询>
    [WITH CHECK OPTION]

    1,其中子查询是任意的select语句,可以包含GROUP BY等语句,不过这得看实际情况。
    2,WITH CHECK OPTION 表示在执行更新,删除,插入得操作时,被执行的行,首先要满足子查询中的谓语条件(即条件表达式)
    3,指定视图的列名只能全部省略或者是全部指定,但是有几种情况是一定要指定视图中的列名。

    1,创建视图时,在select语句中出现不是基本表中的列名,而是表达式或者是聚集函数,比如AVG(score),2019-year
    2,如果使用多张表创建视图,但是其中两张表中有相同的列名。

    4,视图的建立不同于基本表的建立,在建立视图后,系统只是将视图的定义的语句放入到数据字典中,当我们要查询的时候,就从数据字典中取出来并执行。执行更新等操作的时候,也是一个原理,只不过在视图定义的基础上加了更新的语句,详见请看后面。
    5,视图的建立可以基于多张表,也可以基于视图进行建立。如果一个视图是基于一个基本表创建的并且包含了主键,只是去除了某些行和列,在这里我们称为行列子集视图
    6,视图是是基于基本表所创建的,视图的列名和基本表中的列名具有一定的映射关系,因此当我们对基本表的结构进行该表的时候,可能会破坏这种映射的关系。因此当我们在涉及对表的结构进行修改的时候,我们应该删除原来的视图,创建新的视图。

    CREATE VIEW S(NAME,SEX,SCORE)
    AS 
    SELECT Name,Sex,Score 
    FROM   STUDENT
    //比如我们删除Sex这个列,那么它们之间的映射关系就会被破坏,系统就不能正常的工作
    

    删除视图

    删除视图的格式如下

    DROP VIEW <视图名> [CASCADE]

    DROP 命令将视图的定义从数据字典中删除,如果在这个视图上导出了其他的视图,我们应该使用级联删除语句CASCADE 将在这基础上的视图一起删除。

    DROP  VIEW S2  //视图s1是在s2基础上导出的视图,因此执行不成功
    DROP VIEW S1    //执行成功
    
    

    视图的使用

    视图的查询

    1,在用户使用视图进行相应的查询的时候,我们应该先检测有效性,即检测相关的表和视图是否存在。然后再从数据字典中取出视图的定义,并将视图定义中的子查询和用户定义的查询结合。转化为等价的查询语句,然后执行这种方式称为“视图消解”。

    CREATE VIEW S 
    AS 
    SELECT ID,NAME,SEX 
    FROM  STUDENT
    WHERE  SCORE>80
    //这是这个视图的定义
    当我们查询一个ID=20198990“时
    //等价转化的语句
    SELECT ID,NAME,SEX
    FEOM  STUDENT
    WHERE  SCORE>80 AND ID="20198990"
    
    

    2,视图的查询在行列子集视图都能进行正确的等价的转化,但是涉及到有表达式,或者是聚集函数的表达式时,我们应该基于基本表进行修改。

    CREATE VIEW S_C (SNO,GAVG)
    AS 
    SELECT SNO,AVG(GRADE)
    FROM  SC
    GROUP BY SNO
    //当我添加查询平均分大于90分时
    SELECT SNO,GAVG 
    FROM S_C  
    WHERE GAVG>90
    //等价转化为
    SELECT SNO,AVG(GRADE)
    FROM SC
    WHERE AVG(GRADE)>90
    GROUP BY SNO
    //聚集函数出现在where语句,这显示是错误的。我们应该转化为这种形式
    SELECT SNO,AVG(GRADE)
    FROM SC
    GROUP BY SNO
    HAVING AVG(GRADE)>90
    

    3,派生表和视图的区别,派生表出现在语句当中,当所有的语句执行完毕的时候就立即被删除。视图一经定义就被存放在数据字典之中,当我们要使用该视图的时候,就从数据字典中取出并执行。


    视图的更新

    1,更新视图是指插入,修改,删除数据,视图的更新操作和视图的查询一样,通过视图消解,将用户给的条件表达式同视图中子查询的条件表达式转化为等价的select语句。

    CREATE VIEW STUDENT
    AS 
    SELECT SNO,SNAME 
    FROM  S
    WHERE SDEPT='CS'
    WITH CHECK OPTION
    //我们修改计算机学院,学号为2019780的学生的信息
    UPDATE STUDENT 
    SET SNAME='张三'
    WHERE SNO='2019780'
    //等价转化为等价的语句
    UPDATE S 
    SET SNAME='张三'
    WHERE SNO='2019780' AND SDEPT='CS'
    

    2,加入 WITH CHECK OPTION 语句可以防止视图对视图之外的数据进行更改

    根据上列的视图
    INSERT INTO S VALUES('2019860','李四') 
    //此时我们可以观察到其他的值并没有给定,因此对了除条件表达式出现的列名,其他的列值是为空的
    

    3,并不是所有的视图是可以更新的,但是行列子集视图是可更新的,当时包含聚集函数和其他表达式的是不可更新的,因为它们映射到基本表的基本属性,是没法对应的。

    UPDATE S_G
    SET GAVG=90
    WHERE SNO='2019780'
    //这个语句是没办法转化为,对基本表的操作,因为聚集函数的更新,没办法修改各科的成绩
    

    更多相关内容
  • 数据库视图

    千次阅读 2022-04-14 17:16:02
    数据库中的视图是一个虚拟表,同真实的表一样,视图包含一系列带有名称的行和列数据,行和列数据来自定义视图查询所引用的表,并且在引用视图时动态生成。视图是从一个或者多个表中导出的,视图的行为与表非常相似,...

    目录

    一、什么是视图

    二、如何创建视图

    1.创建视图

    2.语法解析

    三、如何使用视图

    1.视图查询操作

    2.视图新增操作

    3.视图删除操作

    4.视图修改操作 

    四、如何修改视图

    五、如何删除视图

    六、如何查看视图


    一、什么是视图

    百度百科的解释是:

    视图是一个虚拟表,视图并不在数据库中存储数据值,数据库中只在数据字典中存储对视图的定义。

    这显然是不能让我们满意的。

    数据库中的视图是一个虚拟表,同真实的表一样,视图包含一系列带有名称的行和列数据,行和列数据来自定义视图查询所引用的表,并且在引用视图时动态生成。视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表。在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。视图可以使用户操作方便,而且可以保障数据库系统的安全。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化。同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。

    视图是一个”虚表”,用大白话说,就是从已经存在的表的全部字段或数据中,挑选出来一部分字段或数据,组成另一张”并不存在的表”,这张虚表被称之”视图”。视图中的字段与对应的数据均来自已经存在的表。对于视图来说,这些已经存在的表就被称为”基表”。基表可以是一张表,也可以是多张表。视图的本质可以理解为一条查询语句,视图中显示的结果,就是这条查询语句查询出的结果。

    上面这一段话来自另外的一个博主的文章,在下面给出了引用链接。他的最后一句话说是一条查询语句,其实是不妥当的,应该是增删改查的语句。

    这篇文章中有一段话说得很好:

    不使用视图的理由:

    mysql对于视图的优化并不完善,这样说并不准确,准确的说,应该是mysql对于子查询的优化不是很好,而使用视图本身往往就意味着使用子查询,所以,如果我们必须使用视图时,最好将视图中的sql语句尽量优化,或者说,数据量大的时候尽量避免使用视图。

    事实确实如此。在写本文之前,我这么多年工作中从未使用过视图,以至于都忘记视图是怎么创建使用的了。在银行的开发中,我所涉及的项目从未有使用过视图,因为在一般情况下,基本的SQL就可以满足了,为什么要使用视图呢?你说呢?我所了解的,在上海的这些银行中,比如,交行卡中心、交总行、交银金科、建行、建信金科、建信人寿,我是没有见到过视图的,而且也从未听说过哪一位同事使用了视图。除此之外,其他如中行、上海银行、浦发银行,我的了解也没有听在里面的同事朋友使用过。 

    好了,我们总结一下吧!

    1、视图是一个虚拟表(逻辑表);

    2、视图中的行和列的数据来自一到多张物理表,也可以来源自其他视图;

    3、可以通过视图进行增删改查;

    4、如果通过视图进行增删改,那么物理表的数据也会随之做出同样的增删改;反之亦然。

    5、视图的使用比较少,起码相对于一般SQL来说,不在一个数量级上;

    6、视图是一种”虚表”,所以不能与已经存在的表重名。

    二、如何创建视图

    在创建视图之前,请先确定当前登录的数据库用户是否拥有创建视图的权限。

    select create_view_priv,select_priv from mysql.user where user='root' and host='localhost';

    查询结果中,create_view_priv的值为Y,表示当前用户拥有创建视图的权利。

    如果我们查询另外的用户: 

    select create_view_priv,select_priv from mysql.user where user='dake' and host='localhost';

     

    说明 dake 这个用户是不具备创建视图的权限的。

    下面我们说说如何创建视图。 

    1.创建视图

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

    2.语法解析

    1. OR REPLACE:如果视图已经存在,则替换旧视图。

    2. FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。

    3. NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。

    4. WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

    接着,我们创建一个视图。

    首先,给出我的基表—STUDENT表的数据:

     然后,我们创建一个视图:

     CREATE VIEW VU_STUDENT AS SELECT * FROM STUDENT WHERE ID > 2;

     然后查看视图的情况,使用命令我们后续再讲。

    查看视图的数据:

    对比 STUDENT 这个基表,我们发现少了2行数据,这少的两行数据就是我们创建视图的时候的SQL中做了限制。

    下面我们再看看视图的原生语句。

     

    我把SQL贴出来:

    CREATE
    OR REPLACE
    VIEW `VU_STUDENT` AS select
        `STUDENT`.`ID` AS `ID`,
        `STUDENT`.`NAME` AS `NAME`,
        `STUDENT`.`GENDER` AS `GENDER`,
        `STUDENT`.`AGE` AS `AGE`,
        `STUDENT`.`CLASS_ID` AS `CLASS_ID`,
        `STUDENT`.`ADDRESS` AS `ADDRESS`
    from
        `STUDENT`
    where
        `STUDENT`.`ID` > 2

     我们看到,它自动增加了 OR REPLACE ,说明 Maria 创建视图时的默认设置。然后把 select * 自动变更为了需要查询的字段,这个是一般SQL的基本操作。

    这里说一下视图的命名。视图的命名最好也是比较规范的写法是加上一定的前缀,当然后缀也可以,这个按照项目要求或者项目统一规范即可。

    比如,我这里就是 VU_ 加上了表名,即 VU_STUDENT 。如果是两张表的话,可以是:

    VU_表1的名字_表2的名字

     这种方式,当然如果表名比较长,或者是多张表,你也可以使用这几张表的简写,或者根据你这个视图的业务逻辑来命名。

    示例视图命令解读

    上面我们创建的视图命令,可以分两部分来解读:

    1、CREATE VIEW VU_STUDENT AS

    2、SELECT * FROM STUDENT WHERE ID > 2;

    其中第一部分表示我们要创建一个视图,视图名为 VU_STUDENT,第二部分表示该视图的业务逻辑。两部分结合起来就是一个完整的视图了。

    上面我们创建的这个视图,得到的列名是和 STUDENT表是一样的,当然我们也可以自行定义列名。不过这个一般很少有人这么做,如果这么做是真的有点扯淡,闲得蛋疼了。不过事无绝对,如果你的视图要和另外的视图或表联合使用,而几张表中表示相同意义的字段名不一样,你使用的时候就有点麻烦。假设有表A和表B,两个表的某一个字段是一个意义,但是名字不一样。此时把你创建的这个视图(假设数据来源自表A)的这一列的列名,修改为和另一张表(表B)的这个列名相同,然后你的业务代码或SQL中对这个视图和表B的操作就方便很多了。

    这个给视图字段起别名的做法就像我们建表时类似。

    CREATE VIEW VU_STD (S_ID, S_NAME, S_GENDER, S_AGE, S_CLASS_ID, S_ADDRESS) AS SELECT * FROM STUDENT WHERE ID > 2;

    此时如果我们查看数据以及列名的话会发现:

     一目了然了吧!

    我们创建这个视图非常简单,其实是因为我们的SQL业务逻辑简单,也就是 示例视图命令解读

    2 中的SQL语句简单了。我们最开始说了,可以增删改查的,那么当然可以使用子查询、连接、分组等等SQL的操作,这个就看你自己的业务逻辑了骚年。

    三、如何使用视图

    1.视图查询操作

    在 二 中我们说了,视图就是一张虚标,你把他当做表即可。

    SELECT * FROM VU_STUDENT;

    我们上面说了,视图可以增删改查,那么增删改怎么使用呢?

    2.视图新增操作

    我们使用视图增加一条记录到 STUDENT 表中:

    CREATE VIEW VU_STD_DLT AS INSERT INTO STUDENT VALUES (14, '范冰冰', '01', 39, 5	, '上海浦东陆家嘴1124号');

     结果呢?

    报错了。是我们SQL有问题吗?

    我们执行SQL插入的逻辑:

    INSERT INTO STUDENT VALUES (14, '范冰冰', '01', 39, 5	, '上海浦东陆家嘴1124号');

    结果呢?

     insert 语句没问题啊!这是什么情况呢?是不是因为我们这个用户的原因呢?我们把登陆用户修改为root试试。

    再新增一条语句:

    CREATE VIEW VU_STD_DLT AS INSERT INTO STUDENT VALUES (15, '范蠡', '00', 50, 0	, '上海浦东陆家嘴1125号');

    结果:

     哈哈!错误是一样的。

    3.视图删除操作

    既然新增不行,那么我修改删除呢?我们先增加一条记录,然后执行删除:

    INSERT INTO STUDENT VALUES (15, '范蠡', '00', 50, 0	, '上海浦东陆家嘴1125号');

    视图删除:

    CREATE VIEW VU_STD_DLT AS DELETE FROM STUDENT WHERE ID = 15;

    删除报错:

    4.视图修改操作 

    那么修改呢?估计也一样。

    CREATE VIEW VU_STD_UPD AS UPDATE STUDENT SET ID = 16 WHERE ID = 15;

    结果:

     通过这几个操作我们得出了结论:

    1、视图的查询操作,可以直接在客户端使用,但是增删改却是不行的;

    2、视图和真实的物理表还是有一些区别的。

    四、如何修改视图

    ALTER VIEW VU_STUDENT AS SELECT * FROM STUDENT WHERE ID > 10; 

    然后查询视图的数据

    SELECT * FROM VU_STUDENT;

     其中第五行是我后面加上的。

    可以看到修改视图很简单。

    五、如何删除视图

    DROP VIEW VU_STUDENT;

     

     如果删除一个不存在的视图呢?

     报错了,那么我们可以使用下面的命令避免这种情况:

    DROP VIEW IF EXISTS VU_STUDENT;

     这样就不会报错了。

    六、如何查看视图

    查看视图的结构:

    DESC VU_STUDENT;

     查看某数据库中所有的视图:

    select * from information_schema.views where table_schema= 'study';

    本文参考:

    MariaDB 视图与触发器

    mysql/mariadb知识点总结 之 视图管理语句

    Oracle 视图详解(view)

    展开全文
  • 主流数据库视图

    多人点赞 热门讨论 2022-04-11 23:15:49
    查询information schema.views表,可以查看到数据库中所有视图的详细信息 修改视图 CREATE OR REPLACE VIEW语句修改视图 使用ALTER语句修改视图 视图操作 使用SQL语句更新视图 基本表数据新增后视图自动更新 ...

    文章目录

    目录

    文章目录

    前言

    视图

    视图概述

    创建视图

    格式

    注意问题:

    示例

    查看视图的方法

    DESCRIBE语句查看视图基本信息

    SHOW TABLES语句查看视图基本信息

    查询information schema.views表,可以查看到数据库中所有视图的详细信息

    修改视图

    CREATE OR REPLACE VIEW语句修改视图

    使用ALTER语句修改视图

    视图操作

    使用SQL语句更新视图

    基本表数据新增后视图自动更新

    删除视图中的数据

    删除视图


    前言

    大家好,我是ice三分颜色。

    个人主页:ice三分颜色的博客

    本文讲了视图的相关知识,创建查看修改删除等。

    走过路过的小伙伴们点个赞和关注再走吧,欢迎评论区交流,努力什么时候开始都不算晚,那不如就从这篇文章开始!

    大家一起成长呀!笔芯


    视图

    视图概述

    1.视图(View)是一个存储指定查询语句的虚拟表,视图中数据来源于由定义视图所引用的表,并且能够实现动态引用,即表中数据发生变化,视图中的数据随之变化。(其本质是来说,是查询语句,起了名称的查询语句,一般我们在查询中写得普通的查询语句,查询完后关掉就没有了。但可以作为视图存下来)

    2.视图是一种数据库对象,是从一个或者多个数据表或视图(视图也可以从视图里进行查询哦)中导出的虚拟表,在数据库中只有视图的定义,而并没有存放视图中的数据,因为视图并没有真实存在的数据,真实的数据还在表中。

    3.浏览视图时所对应数据的行和列数据来自定义视图查询所引用的表,并且在引用视图时动态生成。通过视图可以实现对基表数据的查询修改。(不能直接进行插入操作哦)

    4.视图让数据库用户使用的更方便了,主要包括:

    简化数据查询和处理。视图可以为用户集中多个表中的数据,简化用户对数据的查询和处理。

    屏蔽数据库的复杂性。数据库表的更改不影响用户对数据库的使用,用户也不必了解复杂的数据库中的表结构。(对于定义了若干张表连接的视图,则将表与表之间的连接操作对用户隐蔽起来。)

    安全性。如果要使用户只能查询或修改用户有权限访问的数据,可以只授予用户访问视图的权限,而不授予访问表的权限,这样来提高数据库的安全性。

    创建视图

    格式

    视图可以建立在一张表上,也可以建立在多张表或既有视图上。格式如下:

    CREATE [OR REPLACE] VIEW 视图名[(column_list)]AS select查询语句

    [ WITH [ CASCADED|LOCAL] CHECK OPTION] ;其中:

    REPLACE表示替换已经创建的视图; WITH[CASCADED|LOCAL]CHECK OPTION表示视图在更新时保证在视图的权限范围之内CHECK OPTION 也叫做强制视图,不建议。CASCADED为默认值,表示更新视图时要满足所有相关视图和表的条件;LOCAL表示更新视图时满足该视图本身定义的条件即可,但一般不被允许。

    视图属于数据库,默认情况下将在当前数据库创建视图,若想在给定数据库常见视图,创建时应将名称指定为 库的名字.视图名字。

    创建视图要求用户具有针对视图的CREATE VIEW权限,同时具有查询设计的列的SELECT权限。

    例:通过SELECT语句查询user表获取权限信息(其中Select priv表示用户是否具有SELECT权限,Create_view表示用户是否具有CREATE VIEW权限)

    SELECT Select_priv,Create_view_priv

    FROM mysql.user WHERE user='root';

    注意问题:

    使用CREATE VIEW语句创建视图时需要注意:

    1.在视图的from子句中不能使用子查询。

    2.在视图的select语句中不能引用系统或用户变量。

    3.在视图的select语句中不能引用预处理语句参数。

    4.在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。

    5.在定义中引用的表或视图必须存在。可使用check table语句检查视图定义是否存在。

    6.在定义中不能引用temporary表,不能创建temporary视图。

    7.不能将触发程序与视图关联在一起。

    示例

    创建一个包含员工编号、姓名、职位和部门编号,并按员工编号升序排序的员工基本信息视图

    CREATE VIEW v_emp_base

    AS SELECT empno,ename,job,deptno FROM employee ORDER BY empno;

    创建一个包含多表连接,以及分组查询的视图(视图的SELECT查询可以包含函数、数据组或经过运算得到的数据,也可以是从多个表中获取数据。)

    CREATE OR REPLACE VIEW v_dept_sal(name,minsal,maxsal,avgsal)

    AS

    SELECT d.dname,MIN(e.sal),MAX(e.sal),AVG(e.sal)

    FROM department d,employee e

    WHERE d.deptno = e.deptno GROUP BY d.dname;

    查询这个视图

    SELECT *from v_dept_sal;

    【示例】创建一个工资大于2000的员工年薪信息的视图(如果视图中的SELECT子句包含限定条件,创建视图时可以使用WITHCHECK OPTION选项。)

    -- 表示在更新该视图时,记录数据要满足工资大于2000的条件

    CREATE VIEW v_emp_salary

    AS

    SELECT empno,ename,sal*12 salary

    FROM employee

    WHERE sal>2000 WITH CHECK OPTION;

    查看视图的方法

    describe、show tables、show table status、show create view语句、查询information_schema数据库下的views表等。

    DESCRIBE语句查看视图基本信息

    DESCRIBE | DESC 视图名;

    演示如下:

    DESCRIBE v_emp_salary;

    SHOW TABLES语句查看视图基本信息

    从MySQL5.1开始,执行SHOW TABLES语句时不仅会显示表的名字,同时也会显示视图的名字。

    SHOW TABLES;

    演示如下:

    show tables;

    查询information schema.views表,可以查看到数据库中所有视图的详细信息

    MySQL数据库中,所有视图的定义都存在information_schema数据库下的views表中。

    SELECT * FROM information_schema.views WHERE 表名='视图名';

    例:查询v_emp_salary视图定义

    SELECT * FROM information_schema.views WHERE table_name='v_emp_salary';

    修改视图

    修改数据库中存在的视图,当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表的一致。

    MySQL中通过CREATE OR REPLACE语句和ALTER语句来修改视图

    CREATE OR REPLACE VIEW语句修改视图

    CREATE OR REPLACE VIEW 视图名 [[(字段列表)]As select查询语句

    [ WITH [ CASCADED|LOCAL] CHECK OPTION] ;

    Create or replace view vw_dept

    AS

    Select *from dept;

    查看视图

    当视图已经存在时,修改语句对视图进行修改;当视图不存在时,创建视图。

    使用ALTER语句修改视图

    ALTER VIEW 视图名字 [(字段列表)]As select查询语句

    [ WITH [ CASCADED|LOCAL] CHECK OPTION];

    修改v_emp_base视图将deptno列改为sal列显示

    ALTER VIEW v_emp_base

    AS SELECT empno,ename,job,sal FROM employee ORDER BY empno;

    视图操作

    在视图上也可以进行修改数据的DML操作(INSERT、UPDATE和DELETE)。因为视图是“虚表”,因此对视图的操作最终会转换为对基本表的操作。

    视图上的DML操作会有如下限制:

    1.若一个视图依赖于多张基表,则一次只能修改一个基表的数据,不能同时修改多个基本表的数据;

    2.如果修改违反了基表的约束条件或视图的with check option条件,则无法更新视图;

    3.如果视图包含连接操作符、DISTINCT关键字、集合操作符(UNION) .聚合函数(COUNT、SUM、MAX等)、GROUP BY、ORDER BY、HAVING子句,则将无法更新视图;

    4.如果视图包含SELECT列的子查询、WHERE子句中的子查询、FROM子句中的子查询,则无法更新视图。

    使用SQL语句更新视图

    通过对视图的更新操作来更新基本表数据

    --根据emloyee表创建empview表

    CREATE TABLE empview AS SELECT * FROM employee;

    --创建视图v_emp_update

    CREATE OR REPLACE VIEW v_emp_update

    AS SELECT empno,ename,sal,deptno FROM empview WHERE deptno=20 WITH CHECK OPTION;

    --操作视图v_emp_update更新数据

    UPDATE v_emp_update SET sal=1000 WHERE ename='SMITH';

    --查看基本表empview中数据的变化

    SELECT empno,ename,sal,deptn o FROM empview WHERE ename='SMITH';

    最后结果如下:

    基本表数据新增后视图自动更新

    向基本表中插入数据,视图数据相应更新--向基本表empview中插入一条记录

    INSERT INTO empview VALUES(7777,'TEST','CLERK',7902,2020-12-17,800,NULL,20);

    --查询视图v_emp_update的数据变化

    SELECT * FROMv_emp_update;

    删除视图中的数据

    使用DELETE操作视图来更新基本表数据--删除视图中的数据

    DELETE FROM v_emp_update WHERE empno=7777;

    --查询基本表中数据的变化

    SELECT* FROM empview;

    删除视图

    删除视图时,只能删除视图的定义,不会删除数据。

    MySQL数据库中,用户必须拥有drop权限才能使用drop view语句来删除视图。

    drop view命令可以删除多个视图,各视图名之间用逗号分隔。

    DROP VIEW [if exists] 视图名 [,视图名]

    删除视图v_emp_update

    DROP VIEW IF EXISTS v_emp_update;

    视图就没有啦

    展开全文
  • :一、使用命令创建视图并对视图进行查询、修改、删除等操作;二、用命令的方法创建索引,以及进行重命名和删除操作;三、建立完整性约束,并对其进行相应操作;四、创建存储过程,并对其进行查看,
  • MySQL数据库-视图

    2022-02-16 18:22:32
    这个虚拟的表并不在数据库中实际存在。 说白了,视图就是将一条SELECT查询语句的结果封装到了一个虚拟表中,所以我们在创建视图的时候,工作重心就要放在这条SELECT查询语句上。 视图的好处:简单、安全、数据独立。

    视图

    视图的概念

    作用

    视图的好处

    简单

    安全

    数据独立

    视图数据准备 (样例)

    视图的创建  (view)

    视图的查询

    语法

    查询视图基本演示

    视图的修改

    修改视图表中的数据

    修改视图表结构

    删除视图

    总结


    视图

    视图的概念

    视图是一种虚拟存在的数据表,这个虚拟的表并不在数据库中实际存在。

    作用

    是将一些比较复杂的查询语句的结果,封装到一个虚拟表中。后期再有相同复杂查询时,直接查询这张虚拟表即可。

    就是为了简化操作!

    说白了,视图就是将一条SELECT查询语句的结果封装到了一个虚拟表中,所以我们在创建视图的时候,工作重心就要放在这条SELECT查询语句上。

    例如:

    有两张数据表city 与 country

    需求:查询城市信息和所属国家信息

    SELECT c1.id,c1.name,c2.name 
    FROM city c1,country c2
    WHERE c1.cid=c2.cid; 

    查询结果如下: 

    但是在开发中,如果要较为经常的使用这些信息,那么将会经常使用到上述的SQL语句,这样子较为繁琐。故我们可以使用视图,将上述查询出来的结果封装到一个视图中,下次再使用就直接从视图中取数据即可,不用再使用上述的SQL查询语句了! 

    视图的好处

    简单

    对于使用视图的用户不需要关心表的结构、关联条件和筛选条件。因为这张虚拟表中保存的就是已经过滤好条件的结果集

    安全

    视图可以设置权限 , 致使访问视图的用户只能访问他们被允许查询的结果集

    数据独立

    一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响

    视图数据准备 (样例)

    -- 创建db7数据库
    CREATE DATABASE db7;
    ​
    -- 使用db7数据库
    USE db7;
    ​
    -- 创建country表
    CREATE TABLE country(
        id INT PRIMARY KEY AUTO_INCREMENT,
        country_name VARCHAR(30)
    );
    -- 添加数据
    INSERT INTO country VALUES (NULL,'中国'),
    			(NULL,'美国'),
    			(NULL,'俄罗斯');
    ​
    -- 创建city表
    CREATE TABLE city(
        id INT PRIMARY KEY AUTO_INCREMENT,
        city_name VARCHAR(30),
        cid INT, -- 外键列。关联country表的主键列id
        CONSTRAINT cc_fk1 FOREIGN KEY (cid) REFERENCES country(id)
    );
    -- 添加数据
    INSERT INTO city VALUES (NULL,'北京',1),
    			(NULL,'上海',1),
    			(NULL,'纽约',2),
    			(NULL,'莫斯科',3);

    创建了一个country表和city表。 

           

    视图的创建  (view)

    创建视图语法

    CREATE VIEW 视图名称 [(列名列表)] AS 查询语句;

    (1)普通多表查询,查询城市和所属国家

    SELECT 
    	c1.id,
    	c1.city_name,
    	c2.country_name
    FROM
    	city c1,
    	country c2
    WHERE 
    	c1.cid=c2.id;
    

    (2)创建一个视图,将查询出来的结果保存到这张虚拟表中

    经常需要查询这样的数据,就可以创建一个视图

    CREATE VIEW city_country (city_id,city_name,country_name) AS
    SELECT 
    	c1.id,
    	c1.city_name,
    	c2.country_name
    FROM
    	city c1,
    	country c2
    WHERE 
    	c1.cid=c2.id;

    效果如下: 

     

    视图的查询

    与正常的数据表的查询类似!

    语法

    SELECT * FROM 视图名称;

    查询视图基本演示

    (1)查询视图。查询这张虚拟表,就等效于查询城市和所属国家

    SELECT * FROM city_country; 

    (2)查询所有数据表,视图也会查询出来

    SHOW TABLES;

    (3)查询视图创建

    SHOW CREATE VIEW city_country;

    视图的修改

    修改视图表中的数据

    UPDATE 视图名称 SET 列名=值 WHERE 条件;

    (1)修改视图表中的城市名称北京为北京市

    UPDATE city_country SET city_name='北京市' WHERE city_name='北京';

    (2)查询视图与city表

    SELECT * FROM city_country;

    SELECT * FROM city;

     

    显然修改视图的时候,实际表的数据也修改了

    修改视图表结构

    ALTER VIEW 视图名称 [(列名列表)] AS 查询语句;

    (1)修改视图2的列名city_id为id

    ALTER VIEW 
    	city_country (id,city_name,country_name)
    AS 
    	SELECT c1.id,c1.city_name,c2.country_name
    	FROM city c1,country c2
    	WHERE c1.cid=c2.id;

    显然之前的city_id已经被修改为id了

    SELECT * FROM city_country;

    删除视图

    DROP VIEW [IF EXISTS] 视图名称; ​

    DROP VIEW IF EXISTS city_country;

    总结

    视图是一种虚拟存在的数据表

    这个虚拟的表并不在数据库中实际存在

    说白了,视图就是将一条SELECT查询语句的结果封装到了一个虚拟表中,所以我们在创建视图的时候,工作重心就要放在这条SELECT查询语句上

    视图的好处:简单、安全、数据独立

    展开全文
  • 数据库创建/删除视图语句

    千次阅读 2020-10-29 15:34:49
    复习一下不常用的SQL语句,仅供参考 ...2、删除语句: drop view viewName 3、查询原有视图,创建sql的结构,view_name必须大写,小写查询不到数据 select text from user_views where view_name='PERS
  • 数据库视图数据是否可以直接删除

    千次阅读 2021-03-25 09:47:36
    数据库视图数据是否可以直接删除 文章目录数据库视图数据是否可以直接删除一、视图是什么?二、视图数据删除1.多表构成视图数据删除2.单表视图数据删除总结 一、视图是什么? 视图(VIEW)也被称作虚表,即虚拟的表...
  • 数据库 视图创建

    2022-04-24 15:54:41
    删除视图 drop view 视图名; 查看视图字段信息 desc 视图名; 查看视图创建语句 show create view 视图名\G; 修改视图 alter view视图名 as 查询语句; 创建或修改视图 create or ...
  • 数据库——视图

    2022-02-09 11:20:47
    视图一、视图概念二、 为什么要使用视图三、 性能问题四、 定义视图五、 查看视图六、 删除视图 一、视图概念 视图(View)是一种虚拟存在的表,对于使用视图的用户来说基本上是透明的。视图并不在数据库中实际存放...
  • 数据库视图详解

    万次阅读 多人点赞 2018-11-27 19:36:29
    一、视图的概念   视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。单表视图一般用于查询和修改,会改变基本表的数据;多表视图一般用于查询,不会...
  • 数据库视图详解

    千次阅读 2021-11-05 20:21:47
    视图中的字段就是来自一个或多个数据库中的真实的表中的字段。只保存SQL逻辑,不保存查询结果 。一般用于会在多个地方用到同样的查询结果,或者该查询结果使用的SQL语句较复杂。 创建视图 #方式一: CREATE VIEW ...
  • 删除视图: 方式2-SQL语句: 创建视图:  查看视图中的数据: 修改视图删除视图: 方式1-图形用户界面: 新建视图: 保存视图: 刷新视图节点: 查看视图:  维护视图删除视图: 方式2-SQL语句...
  • SQL Server 数据库视图

    千次阅读 2022-03-17 17:07:08
    MySQL 数据库视图 视图的增删查改操作介绍
  • 金仓数据库KingbaseES视图的管理
  • 一、视图方法 点击数据库--右键--点击删除 二、sql语句删除方法 (1) USE master --向这个数据库 DROP DATABASE E_Market --删除E_Market数据库 GO (2)判断数据是否有E_Market这个数据库、如果有就进行删除 --...
  • 视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就...
  • 视图(二)1. 查询视图信息1.1 查询和视图设计工具 1. 查询视图信息 1.1 查询和视图设计工具 打开视图的定义、显示查询视图的结果
  • Delphi创建SQLserver数据库视图的例子,使用create View语句来生成视图,当然本程序创建好视图后,也可删除视图,下面是详细的代码:  //创建一个视图:  procedure TForm1.Button1Click(Sender: TObject);  ...
  • 文章目录1 视图概述2 创建视图3 修改视图4 删除视图 1 视图概述 视图就是将一个或多个表中的目标字段抽取出来形成的一个虚拟表。这个虚拟表和真实的表具有相同的功能。 2 创建视图 语法格式: create view view_name...
  • Mysql数据库建立视图的方法

    千次阅读 2020-11-09 21:08:26
    视图创建 创建视图的原因: 当只想把表中的一部分内容展示给另一个用户,则可以建立一个视图,视图表中的内容是父表中能展示的部分。 视图和父表可以联动,当父标的内容发生了改变,视图内容也会更着变化。 可以...
  • 视图: 什么是视图 ? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个...删除和查看视图 视图的更新 视图和表的的比较 练习 ...
  • 【第八篇】MySQL数据库视图详解

    多人点赞 2022-03-04 15:31:05
    但是,数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中
  • 数据库视图特性

    2020-06-26 17:49:34
    视图是一个虚拟表,其内容由查询定义,如同真实的表一样,视图包含一系列带有名称的列和行数据,视图的数据变化会影响到基表,基表的数据变化也会影响视图 基本使用 创建视图 create view 视图名 as select 语句 ...
  • 视图的创建修改删除数据库备份和还原
  • MySQL数据库-视图操作详解

    千次阅读 2021-08-09 20:11:42
    视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不看整个数据库表中的数据,而只关心对自己有用的数据。视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。 为什么要使用视图...
  • MySQL数据库视图

    2021-05-29 22:40:55
    视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的(即每次使用视图视图都会去查询真正的表数据,因此源表数据改变,视图中的数据也会改变)。通俗的讲,视图就是...
  • MySQL实验四:数据库视图操作实验

    千次阅读 2021-09-08 20:14:02
    实验四:数据库视图操作实验 一、实验目的 1、熟悉视图的概念和作用; 2、掌握视图的创建方法; 3、掌握如何查询和修改视图。 二、实验环境 硬件:PC机 软件:Linux操作系统、MySQL Server 6.0 三、实验内容和步骤...
  • 能够为数据库数据提供的最简单的用户界面之一就是窗体,窗体可以一次性呈现出来自同一记录的各个域。本文通过python3+pyqt5改写实现了python Qt gui 快速变成15章的例子。 #!/usr/bin/env python3 import os import...

空空如也

空空如也

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

数据库删除视图