mysql------视图

本文详细介绍了MySQL中的视图,包括视图的概述、创建、查看、修改、更新和删除等操作。视图作为虚拟表,能够简化数据查询并提供额外的安全层。创建视图时可以指定WITH CHECK OPTION参数以限制更新。当基本表结构改变时,可通过修改视图保持一致性。然而,包含特定条件的视图无法执行更新操作,如非空列、数学表达式、聚合函数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 视图概述

(1)视图的含义

         视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。

(2)视图的作用

        简单性:简化用户对数据的理解和操作。
        安全性:通过视图用户只能查询和修改他们所能看到的数据,对于数据库中的其他数据则看不到也取不到。
        逻辑数据独立性:视图可以帮助用户屏蔽真实表结构变化带来的影响。

2、 创建视图

(1)创建视图使用CREATE   VIEW语句,基本语法格式如下:
    CREATE [OR REPLACE]       [ALGORITHM ={UNDEFINED | MERGE | TEMPTABLE}]

                   VIEW     view_name [(column_list)]

                   AS         SELECT_statement

                   [WITH [CASCADED | LOCAL]CHECK OPTION]

   CREATE表示创建新的视图;

   REPLACE表示替换已经创建的视图;

   ALGORITHM表示视图选择的算法,UNDEFINED表示mysql将自动选择算法,MERGE表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的 部分, TEMPTABLE表示将视图的结果存入临时表,然后用临时表来执行语句;

  view_name表示视图的名称;

  column_list表示为属性列;

  SELECT_statement表示select语句;

  WITH [CASCADED | LOCAL]CHECK OPTION参数表示视图在更新时保证在视图的权限范围之内,CASCADED 为默认值,表示更新视图时要满足所有相关视图和表的条件,LOCAL表示更新视图时满足该视图本身定义的条件即可。


(2)在单表上创建视图

 MySQL可以在单个数据表上创建视图。

例1:在t表格上创建一个名为view_t的视图

CREATE TABLE t (qty INT, price INT);         /*创建基本表t*/
INSERT INTO t VALUES(3, 50);                 /*插入记录*/

CREATE VIEW view_t AS SELECT quantity, price, quantity *price FROM t;    /*创建视图view_t*/
SELECT * FROM view_t;

默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

例2:在t表格上创建一个名为view_t2的视图

CREATE VIEW view_t2(qty, price, total ) AS SELECT quantity, price, quantity *price FROM t;
SELECT * FROM view_t2;


(3)在多表上创建
视图
MySQL中也可以在两个或者两个以上的表上创建视图,可以使用CREATE  VIEW语句实现。

例1:在表student和表stu_info上创建视图stu_glass

CREATE VIEW stu_glass (id,name, glass) AS SELECT student.s_id,student.name ,stu_info.glass FROM student ,stu_info WHERE student.s_id=stu_info.s_id;

SELECT * FROM stu_glass;

这个视图只包含了id、姓名、班级,id对应student表中的s_id字段,name字段对应student表中的name字段,glass字段对应stu_info表中的glass字段。

3、查看视图

(1)DESCRIBE 语句查看视图基本信息,可以简写为DESC
 语法:DESCRIBE 视图名;

例1:通过DESCRIBE语句查看视图view_t的定义

DESCRIBE view_t;


(2)SHOW  TABLE  STATUS
语句查看视图基本信息
 语法:SHOW  TABLE  STATUS  LIKE '视图名';

例1:使用SHOW  TABLE  STATUS命令查看视图信息

SHOW TABLE STATUS LIKE 'view_t' \G;
SHOW TABLE STATUS LIKE 't' \G;



(3)
SHOW  CREATE  VIEW语句查看视图详细信息
语法:SHOW  CREATE  VIEW 视图名;

例1:SHOW CREATE VIEW查看视图的详细定义
SHOW CREATE VIEW view_t \G;



(4)views表中查看视图详细信息
MySQL中,information_schema数据库下的views中存储了所有视图的定义。通过对views表的查询,可以查看数据库中所有的视图的详细信息
SELECT * FROM information_schema.views;


4、 修改视图

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


(1)用CREATE  OR  REPLACE   VIEW语句修改视图

语法:CREATE [OR REPLACE]       [ALGORITHM= {UNDEFINED | MERGE | TEMPTABLE}]

           VIEW   view_name [(column_list)]

            AS    SELECT_statement

            [WITH [CASCADED | LOCAL] CHECK OPTION]

和创建视图的语法一样。

例1:修改视图view_t
DESC view_t;
CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
DESC view_t;



(2)ALTER语句修改视图

语法:ALTER [ALGORITHM = {UNDEFINED | MERGE |TEMPTABLE}]

            VIEW   view_name [(column_list)]

            AS  SELECT_statement

           [WITH [CASCADED | LOCAL] CHECK OPTION]


例1:使用ALTER语句修改视图view_t

DESC view_t;
ALTER VIEW view_t AS SELECT quantity FROM t; 
DESC view_t;


5、更新视图

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录

例1:使用UPDATE语句更新视图view_t

SELECT * FROM view_t;          /*查看更新之前的视图*/
SELECT * FROM t;               /*查看更新之前的表*/
UPDATE view_t SET quantity=5;  /*更新视图*/
SELECT * FROM t;               /*查看更新之后的表*/
SELECT * FROM view_t;          /*查看更新之后的视图*/

对视图view_t更新后,基本表t的内容也更新了,同样当对基本表t更新后,另一个视图view_t2的内容也会更新,可以用SELECT * FROM view_t2;语句查看view_t2视图。


例2:使用INSERT语句在基本表t中插入一条记录

INSERT INTO t VALUES (3,5);
SELECT * FROM t;
SELECT * FROM view_t2;

当向t表插入一条记录时,可以看到其他的内容也跟着更新了


例3:用delete删除视图view_t2中的一条记录

delete from view_t2 where price=5;
select * from view_t2;
select * from t;

在视图view_t2中删除price=5的记录,视图的删除是通过删除基本表中相关的记录实现的。



当视图中包含有如下内容时,视图的更新操作将不能被执行:

A、视图中不包含基本表中被定义为非空的列

B、在定义视图的select语句后的字段列表中使用了数学表达式

C、在定义视图的select语句后的字段列表中使用聚合函数

D、在定义视图的select语句中使用了distinct,union,top,group by或having句子



6、删除视图

当视图不再需要时,可以将其删除,删除一个或多个视图可以使用DROPVIEW语句删除视图必须拥有DROP权限

  语法: DROP   VIEW [IF EXISTS]

              view_name[,view_name] ...

              [RESTRICT | CASCADE]


例1:删除stu_glass视图

DROP VIEW IF EXISTS stu_glass;
SHOW CREATE VIEW stu_glass;

转载请注明出处:http://blog.youkuaiyun.com/linshuxin111/





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值