MySQL操作之视图

序号类型地址
1MySQLMySQL操作之概念、SQL约束(一)
2MySQLMySQL操作之数据定义语言(DDL)(二)
3MySQLMySQL操作之数据操作语言(DML)(三)
4MySQLMySQL操作之数据查询语言:(DQL)(四-1)(单表操作)
5MySQLMySQL操作之数据查询语言:(DQL)(四-2)(多表查询)
6MySQLMySQL操作之数据控制语言:(DC)(五)
7MySQLMySQL操作之数据库函数
8MySQLMySQL管理之数据类型
9MySQLMySQL管理之索引
10MySQLMySQL管理之事务管理
11MySQLMySQL管理之存储过程
12MySQLMySQL管理之视图
13MySQLMySQL管理之数据备份与还原
14MySQLLinux(centos 7.5)服务器安装MySQL
15MyBatisMyBatis从入门到多表关联
16MyBatisMyBatis常用方法
17MyBatisMybatis逆向工程的使用(附文件地址)
18MyBatisspring boot连接Mybatis数据库的配置文件(MySql、SQLserver、Oracle)
19MyBatis-PlusMybatis-Plus使用案例(包括初始化以及常用插件)
20MyBatis-Plusmybatis-plus代码生成器
21MyBatis-Plus自定义SQL
22MyBatis-PlusMybatis-Plus(连接Hive)
23MyBatis-PlusMyBatis-plus配置自定义SQL(执行用户传入SQL)
24MyBatis-PlusMybatis-Plus(Service CRUD 接口)


一、概念

视图是从一个表或者多个表导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表。通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中的数据进行查询、修改和删除。

视图的优点:

  • 简化查询语句

视图不仅可以简化用户对数据的理解,还可以简化对数据的操作。

日常可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作。

  • 安全性

通过视图用户只能查询和修改他们所能见到的数据,数据库中的其它数据既看不到也取不到。

  • 逻辑数据独立性

视图可以帮助用户屏蔽真实表结构变化带来的影响。

二、视图管理

2.1、创建视图语法格式

视图的创建基于SELECT语句和已经存在的数据表。视图可以建立在一张表上,也可以是多张表上。

CREATE [OR REPLACE][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE }]
	VIEW view_table_name [column_list]
	AS select_statement
	[WITH [CASCADED | LOCAL] CHECK OPTION]
  • CREATE:表示创建视图的关键字。

  • OR REPLACE:表示该语句能够替换已有视图。

  • ALGORITHM:可选。表示视图选择的算法。

    1. UNDEFINED:表示MySQL将字段选择所要使用的算法。

    2. MERGE:表示将使用视图的语句与视图定义合并起来,使视图定义的某一部分取代语句的对应部分。

    3. TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句。

  • view_name:表示要创建的视图名称。

  • column_list:可选,表示属性清单。指定了视图中各个属性的名。默认情况下:与SELECT语句中查询的属性相同。

  • AS:表示指定视图要执行的操作。

  • select_statement:是一个完整的查询语句,表示从某个表或者视图中查出某些满足条件的数据,将这些数据存入视图中。

  • WITH CHECK OPTION:可选。表示创建视图时要保证在该视图的权限范围内。

    1. CASCADED:可选。表示创建视图时,要满足跟该视图有关的所有相关视图和表的条件。(该参数为默认值)
    2. LOCAL:可选。表示创建视图时,只要满足该视图本身定义的条件既可。

2.2 创建视图

使用源表列名

CREATE VIEW view_stu 
	AS SELECT math,chinese,math + chinese FROM student;

结果:

mathchinesemath+chinese
8078158

指定视图字段名称

CREATE VIEW view_stu2(math,chin,sum)
	AS SELECT math,chinese,math + chinese FROM student;

结果:

mathchinsum
8078158

多表创建视图

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

2.3 查看视图

有三种方式查看创建的视图:

  • 使用DESCRIBE
  • 使用SHOW TABLE STATUS
  • 使用SHOW CREATE VIEW

1. 使用DESCRIBE

DESCRIBE 视图名;
DESC 视图名;

语句

DESCRIBE stu_class;

在这里插入图片描述

2. 使用SHOW TABLE STATUS

SHOW TABLE STATUS '视图名';
SHOW TABLE STATUS 'stu_class';

视图中多列值为null。(存储引擎,数据长度)

基本表:

在这里插入图片描述

视图表:

在这里插入图片描述

3. 使用SHOW CREATE VIEW

SHOW CREATE VIEW 视图名;
SHOW CREATE VIEW my_student;

在这里插入图片描述

2.4 修改视图

修改数据库中存在的视图的定义。当基本表中的某些字段发生改变时,修改视图保持视图与基本表的一致性。

  • 使用CREATE OR REPLACE VIEW
  • 使用ALTER

1. 使用CREATE OR REPLACE VIEW

CREATE OR REPLACE VIEW view_stu AS SELECT * FROM student;
  • view_stu:表示要修改的视图的名称。
  • *:通配符表示表中更新表中所有的字段。
  • student:表示基本表的表名。

2. 使用ALTER

ALTER VIEW view_stu SELECT chinese FROM student;
  • view_stu:表示要修改的视图的名称。
  • chinese:表示基本表中chinese,要更新的字段名。
  • student:表示基本表的表名。

2.5 更新视图

  • 更新视图是指通过视图来更新、插入、删除基本表中的数据。
  • 当更新视图或者基本表,对应的视图、基本表都会更新。除了4. 特殊情况不更新视图中一些不能在视图中更新内容。

1. 更新视图中字段值:

UPDATE view_stu SET chinese = 100;

结果:

  • 视图中的,基本表student、与student关联的视图表,chinese 字段都更新。

在这里插入图片描述

2. 使用INSERT 更新视图:

向基本表中插入数据

INSERT INTO student VALUES( 4, 'lisi', 100, 100 );

在这里插入图片描述

3. 使用DELECT 更新视图:

  • 删除数据是通过基本表进行删除的。
DELETE FROM view_stu2 WHERE math = 70;

4. 特殊情况不更新视图

  • 视图中包含基本表中定义为非空的列。
  • 在定义视图的SELECT语句后的字段列表中使用了数学表达式。
  • 在定义视图的SELECT语句后的字段列表中使用了聚合函数。
  • 在定义视图的SELECT语句后的字段列表中使用了DISTINCTUNIONTOPGROUP BYHAVING语句。

2.6 删除视图

语法:

DROP VIEW[IF EXISTS]
	view_naem [,view_name1]...
	[RESTRICT|CASCADE]

删除视图view_stu2

DROP VIEW IF EXISTS view_stu2;
posted @ 2022-08-03 23:56  ah_lydms  阅读(181)  评论(0编辑  收藏  举报