视图:逻辑上表的集合,不会真实存在,虚拟表,和普通表一样使用
一、创建视图
语法:
CREATE VIEW 视图名
AS
查询语句;
二、视图的修改:
方式一:
CREATE OR REPLACE VIEW 视图名
AS
查询语句;
方式二:
ALTER VIEW 视图名
AS
查询语句;
三、删除视图
:
支持一次性删除多个视图:
DROP VIEW 视图名,视图名,....;
四、查看视图
:
DESC 视图名;
SHOW CREATE VIEW 视图名
五、视图的更新
指:更改试图里面的数据
insert、update、DELETE 等语句都可以对视图进行操作,但是同时会改变原基表的数据
具备以下特点的视图是不允许更新的
①创建视图时,包含以下的关键字的sql语句:
分组函数、DISTINCT、GROUP BY、having、UNION或者UNION ALL
②常量视图
CREATE OR REPLACE VIEW myv1
AS
SELECT '常量' ;
③创建视图时,select 中包含子查询
④创建视图时,用到了连接语句(join)
⑤创建视图时,from后面跟了一个不能跟新的视图
⑥where子句中的子查询引用了from子句中的表
CREATE OR REPLACE VIEW myv2
AS
SELECT name,email,salary
from employees
WHERE empoyee_id IN(
SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL);
六、视图和表的对比
七、视图授权给某用户,及回收用户权限,查看权限
视图授权
#仅授予用户查看视图的权限
GRANT SELECT ON "库名"."视图名" TO '用户名'@'%';
取消视图授权
#取消用户对某视图的查看权限
revoke SELECT ON "库名"."视图名" from '用户名'@'%';
查看该用户下有多少视图或表被授权
#查看该用户下有多少视图或表被授权
show grants for 用户名;
查某个用户下视图的具体数据量,或者视图名,通过information_schema.table_privileges 来查询
select count(1) from information_schema.table_privileges
where grantee like '%用户名%'