📖 本文目录

  • 📖 MySQL —— VIEW (MySQL视图)
  • 📑 什么是视图
  • 📑 视图的作用
  • 📑 视图的相关操作
  • 🔖 查看是否具有创建视图的权限
  • 🔖 视图的创建
  • 🔖 视图的删除
  • 🔖 视图的修改


📖 MySQL —— VIEW (MySQL视图)

推荐学习资料—— MySQL视图 —— pan_junbiao

做出的知识笔记 —— 用于自身学习

📑 什么是视图

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。

您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

📑 视图的作用

视图的作用:

1、视图隐藏了底层的表结构简化了数据访问操作客户端不再需要知道底层表的结构及其之间的关系。

2、视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限

3、从而加强了安全性使用户只能看到视图所显示的数据

4、视图还可以被嵌套,一个视图中可以嵌套另一个视图。

📑 视图的相关操作

🔖 查看是否具有创建视图的权限

  • 首先我们需要创建视图肯定需要有 CREATE VIEW 的权限。同时也应该具有 查询创建的视图所涉及的列的 查询 SELECT 权限。 可以通过查询 mysql.user 表中对应用户角色的权限列查看其是否具有对应的权限。
-- 查询 root 用户是否具有 查询权限,创建视图权限
SELECT Select_priv,Create_view_priv from mysql.user where User ='root';

mysql 视图 修改 mysql视图的创建 修改与删除_mysql 视图 修改

如图所示,说明当前 用户 root 是具有以上两个权限的。

🔖 视图的创建

视图创建的语法

CREATE [OR REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
VIEW VIEW_NAME[(column_list)]
AS SELECT_STATEMENT
[WITH [CASCADED|LOCAL] CHECK OPTION];

参数说明

  • ALGORITHM :可选项,设置创建视图时采用的算法。
  • VIEW_NAME:所创建出来的视图名称
  • column_list:可选项,指定视图中每个属性名词,默认与查询语句中查询的属性相同。
  • SELECT_STATEMENT:将查询的数据记录在 视图当中
  • [WITH [CASCADED|LOCAL] CHECK OPTION] : 表示更新的视图要保证在该视图的权限当中
CREATE OR REPLACE VIEW view_user(user_id,user_name)
AS
    SELECT u_id, username from user;

mysql 视图 修改 mysql视图的创建 修改与删除_mysql 视图 修改_02

📚注意:

(1)运行创建视图的语句需要用户具有创建视图(create view)的权限,若加了[or replace]时,还需要用户具有删除视图(drop view)的权限;

(2)select语句不能包含from子句中的子查询;

(3)select语句不能引用系统或用户变量

(4)select语句不能引用预处理语句参数

(5)在存储子程序内,定义不能引用子程序参数或局部变量

(6)在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用check table语句;

(7)在定义中不能引用temporary表,不能创建temporary视图;

(8)在视图定义中命名的表必须已存在

(9)不能将触发程序与视图关联在一起;

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

🔖 视图的删除

DROP VIEW IF EXISTS view_user;

🔖 视图的修改

📚 注意:修改视图实际上是对数据库中已存在的表的定义进行了修改。当一些字段发生了改变之后,可以通过修改视图来保持视图与构建视图的基本表之间一致。

ALTER VIEW view_user
AS
	SELECT u_id,username FROM users where u_id  in (select _id from users);