一、创建视图

CREATE VIEW <视图名称> [(<列名1>, <列名2>, ...)]

AS <SELECT语句>

[WITH CHECK OPTION];

 

关键参数说明:

`<视图名称>`:视图的唯一标识符。

`(<列名1>, <列名2>, ...)`:可选。为视图的列指定自定义名称,数量必须与 `SELECT` 语句的列数一致。如果省略,视图将直接使用 `SELECT` 语句中的列名。

`<SELECT语句>`**:用于定义视图内容的查询语句。

`WITH CHECK OPTION`**:可选。确保通过视图对数据进行插入或修改时,这些操作必须符合视图定义中 `SELECT` 语句的 `WHERE` 条件。

 

创建视图的限制:

1.  用户需要拥有 `CREATE VIEW` 权限以及操作底层基础表的所有相关权限。

2.  `SELECT` 语句中不能:

       引用系统变量(如 `@@variable`)或用户自定义变量(如 `@variable`)。

       包含 `FROM` 子句中的子查询。

       引用预处理语句的参数。

3.  视图不能基于临时表(TEMPORARY TABLE)创建。

4.  视图定义中可以包含 `ORDER BY`,但如果从该视图查询时使用了自身的 `ORDER BY`,则视图中的排序会被覆盖。

 

二、创建视图的实例

假设存在表 `tb_students_info`,数据如下:

idnamedept_idagesexheightlogin_date
1Dany125F1602015-09-10
2Green323F1582016-10-22

 

1. 基于单表创建视图(保留原列名)

CREATE VIEW view_students_info
AS SELECT * FROM tb_students_info;

此视图 `view_students_info` 的所有列与源表 `tb_students_info` 完全一致。

 

2. 基于单表创建视图(自定义列名)**

CREATE VIEW v_students_info
(s_id, s_name, d_id, s_age, s_sex, s_height, s_date)
AS SELECT id, name, dept_id, age, sex, height, login_date
FROM tb_students_info;

此视图 `v_students_info` 的列名被重新定义,增强了可读性和安全性。

 

3. 基于多表创建视图

CREATE VIEW v_students_departments
(s_id, s_name, s_age, dept_name)
AS SELECT s.id, s.name, s.age, d.dept_name
FROM tb_students_info s
INNER JOIN tb_departments d ON s.dept_id = d.dept_id;

这个视图将学生信息与部门名称关联起来,简化了复杂的表连接查询。

三、查询视图

视图创建后,可以像查询普通表一样使用 `SELECT` 语句。

 查询视图全部内容

SELECT * FROM v_students_info;

带条件查询视图

SELECT s_name, s_age FROM v_students_info WHERE s_age > 22;

查看视图结构

可以使用 `DESCRIBE` 或其简写 `DESC` 来查看视图的字段定义。

DESCRIBE v_students_info;

或者

DESC v_students_info;

执行结果将显示视图的每个列名(Field)、数据类型(Type)、是否允许为空(Null)等信息。

四、视图的核心优点

1.  简化操作:将复杂的多表连接查询封装在视图中,使用者只需查询视图即可,无需编写复杂的 SQL。

2.  增强安全性:可以只将视图暴露给用户,而非底层基础表。通过视图限制用户只能访问特定的行(如 `WHERE dept_id = 1`) 或列,保护敏感数据。

3.  逻辑数据独立性:如果基础表的 schema 发生变化(如列名改变),只需修改视图的定义即可屏蔽这种变化,使依赖视图的应用程序不受影响。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)