前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >9-视图

9-视图

作者头像
Ywrby
发布2022-10-27 13:12:28
1960
发布2022-10-27 13:12:28
举报
文章被收录于专栏:Ywrby

视图

含义

虚拟表,可以和普通表一样使用。MySQL5.1版本出现的新特性,是通过表动态生成的数据,也就是说行和列的数据都来自定义识图的查询中使用的表,只保存sql逻辑,不保存查询结果

类似于Java中包装一个方法/函数

应用场景

  • 多个地方用到同样的查询结果
  • 该查询结果使用的sql语句较为复杂

视图的创建

视图的好处

  • 有利于重用sql语句
  • 简化复杂的sql操作,不必知道它的查询细节
  • 保护数据,提高安全性
代码语言:javascript
复制
# 视图的创建

USE myemployees;

/*
语法:
CREATE VIEW 视图名
AS 
查询语句;

*/


# 查询邮箱中包含a字符的员工名,部门名,和工种信息

# 创建视图(这里使用的sql92连接查询方法,还可以使用sql99 JOIN ON)
CREATE VIEW v1
AS
SELECT CONCAT(first_name,' ',last_name) 姓名, department_name 部门名,job_title 工种,email 
FROM employees e,jobs j, departments d
WHERE e.`job_id`=j.`job_id` AND e.`department_id`=d.`department_id` ;
# 使用视图
SELECT * FROM v1 WHERE email LIKE '%a%';


# 查询各部门的平均工资级别
# 首先创建视图查看每个部门的平均工资
CREATE VIEW v2
AS
SELECT AVG(salary) ag,department_id id
FROM employees
GROUP BY department_id;
# 利用视图查询各个部门的平均工资等级
SELECT department_name 部门名称,ag 平均工资 FROM v2
JOIN departments ON id=department_id

视图的修改

代码语言:javascript
复制
# 视图的修改

# 方式一
/*
这种方法表示如果视图存在,就根据后续的语句进行修改,如果不存在就新建视图

CREATE OR REPLACE VIEW 视图名
AS
查询语句;


*/

SELECT * FROM v2;

CREATE OR REPLACE VIEW v2
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

# 方式二
/*

语法:
ALTER VIEW 视图名
AS
查询语句;

*/
ALTER VIEW v2 
AS 
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;

视图删除,查看

注意,这里视图的更新表示的是向已经创建好的视图中插入,修改或删除数据,而不是对视图的格式进行修改。视图格式的修改在之前已经提到过了

代码语言:javascript
复制
# 视图的删除

/*
语法:
DROP VIEW 视图名,视图名,...

允许一次删除多个,但删除需要具备权限

*/

DROP VIEW v1,v2;

# 查看视图结构
DESC v1; 
# 或者
SHOW CREATE VIEW v1;

视图的更新

代码语言:javascript
复制
# 视图的更新

CREATE OR REPLACE VIEW v3
AS 
SELECT last_name,email
FROM employees;

SELECT * FROM v3;

# 简单视图支持增删改,并且增删改视图之后,会对利用到的原表进行更新
# 显然这是不安全的,所以我们一般会为视图设置权限,避免对其进行增删改操作,而是只查模式
# 添加
INSERT INTO v3 VALUES('Leslie','2333@gmail.com');
# 修改
UPDATE v3 SET email='@qq.com' WHERE last_name='Leslie';
# 删除
DELETE FROM v3 WHERE last_name='Leslie';

# 具备以下特点的视图不允许更新
/*

1. 包含以下关键字的sql语句:分组函数,DISTINCT.GROUP BY,HAVING,UNION
2. 常量视图
3. SELECT 中包含子查询
4. JOIN
5. FROM一个不能更新的视图
6. WHERE字句的子查询引用了FROM字句中的表

*/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 视图
    • 含义
      • 应用场景
    • 视图的创建
      • 视图的好处
    • 视图的修改
      • 视图删除,查看
        • 视图的更新
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档