📖 本文目录
- 📖 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';
如图所示,说明当前 用户 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;
📚注意:
(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);