12 视图

视图:虚拟表,和普通表一样使用。数据库中只存放了视图的定义,并没有存放视图中的数据。本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需要使用名称即可获取结果集,并可以将其当做表来使用。

 

视图和表的对比:

  创建语法的关键字 是否实际占用物理空间 使用
视图 create view 只是保存了sql逻辑 增删改查,只是一般不能增删改
create table 只保存了数据 增删改查

举个例子:

当不用视图调用时,

SELECT * FROM
(SELECT * FROM student
WHERE gender='') AS A
WHERE A.class_id>1;

但是当有很多查询需要用到上面的临时表进行查询,工作量就会大很多。此时,可以使用视图,

--1.创建视图
CREATE VIEW tb1
AS
SELECT * FROM student WHERE gender='';

--2.使用视图进行查询
SELECT * FROM tb1 WHERE class_id>1;

 

一、创建视图

CREATE VIEW 视图名
AS 
查询语句;

二、修改视图

--方式一
ALTER VIEW 视图名
AS
查询语句;

--方式二
CREATE OR REPLACE VIEW 视图名
AS
查询语句;

三、删除视图

DROP VIEW 视图名1,视图名2,...;

四、查看视图

DESC 视图名;

SHOW CREATE VIEW 视图名;

五、更新视图:插入、修改和删除

示例:创建一个很简单的视图

CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email
FROM employees;

1. 插入

INSERT INTO myv1 VALUES('张飞','zf@qq.com');

使用像更新表一样的语句来更新视图,会更改原始表。

2. 修改

UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';

3. 删除

DELETE FROM myv1 WHERE last_name = '张无忌';

修改、删除和插入同理,都会在更新视图的同时更新原始表。

以下不允许更新视图:

1. 包含分组函数及DISTINCT、GROUP BY、HAVING、UNION或者UNION ALL。

2. 常量视图。

3. Select中包含子查询。

4. JOIN

5. WHERE后面的子查询引用了FROM中的表。

6. 用到了不可更新的视图。

 

posted @ 2021-04-13 23:17  赵Gary  阅读(62)  评论(0)    收藏  举报