第三课 视图

  • 含义:虚拟的表,和普通的表的使用没有区别,具有临时性
  • MySQL5.1版本出现的新特性,是通过表动态生成的数据

1 基本概念

  • 视图:MySQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存SQL逻辑,不保存查询结果
  • 应用场景:
    • 多个地方用到同样的查询结果
    • 该查询结果使用的SQL语句较复杂

2 视图的创建

  • 语法:
CREATE VIEW 视图名称 AS 查询语句l;
# 1 查询姓名中包含a字符的员工名,部门名和工种信息(视图的创建)
CREATE VIEW includeA AS SELECT
	emp.last_name,
	dep.department_name,
	job.*
FROM
	employees emp
INNER JOIN departments dep ON emp.department_id = dep.department_id
INNER JOIN jobs job ON emp.job_id = job.job_id
WHERE
	emp.last_name LIKE '%a%';

3 视图的修改

  • 方式一:存在就修改,不存在就创建
CREATE OR REPLACE VIEW 视图名称
AS
查询语句;
  • 方式二
ALTER VIEW 视图名称
AS
查询语句;
# 4 修改视图
# 方式一;
CREATE
OR REPLACE VIEW avgsalary AS SELECT
	*
FROM
	my_employees;

# 方式二:
ALTER VIEW avgsalary AS SELECT
	*
FROM
	employees;

4 视图的删除

DROP VIEW 视图名1,视图名2.....;

5 视图基本信息的查看

  • 一般在命令行界面中进行查看
  • 语法(\G是对结果进行格式化):SHOW CREATE VIEW 视图名称 \G;DESC 视图名;
  • 基本信息包括:视图名,视图创建过程(SQL语句),视图字符集
mysql> SHOW CREATE VIEW avgSalary \G;
*************************** 1. row ***************************
                View: avgsalary
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `avgsalary` AS select `employees`.`employee_id` AS `employee_id`,`employees`.`first_name` AS `first_name`,`employees`.`last_name` AS `last_name`,`employees`.`email` AS `email`,`employees`.`phone_number` AS `phone_number`,`employees`.`job_id` AS `job_id`,`employees`.`salary` AS `salary`,`employees`.`commission_pct` AS `commission_pct`,`employees`.`manager_id` AS `manager_id`,`employees`.`department_id` AS `department_id`,`employees`.`hiredate` AS `hiredate` from `employees`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

6 视图的更新(更新数据)

  • 可以通过INSERTUPDATEDELETE语句对视图中的数据进行更改
  • 以下种类的视图,视图中的数据不可以更改
    • 包含以下关键字的SQL语句:分组函数,DISTINCT,GROUP BY,HAVING,UNION,UNION ALL
    • 常量视图(CREATE OR REPLACE VIEW myView AS SELECT 'A' name
    • SELECT中包含子查询(CREATE OR REPLACE VIEW demo AS SELECT (SELECT MAX(emp.salary) FROM employees emp) AS MAXSALARY;
    • 创建视图的时候使用了连接(此时视图中的数据可以被更新,但是不能插入新的数据)
    • FROM一个不能更新的视图(CREATE OR REPLACE VIEW demo AS SELECT * FROM 不可更新的视图
    • WHERE子句的子查询引用了FROM子句中的表
# WHERE子句的子查询引用了FROM子句中的表
CREATE
OR REPLACE VIEW demo AS SELECT
	emp.last_name,
	emp.email,
	emp.salary
FROM
	employees emp
WHERE
	emp.employee_id IN (
		SELECT
			manager_id
		FROM
			employees
		WHERE
			manager_id IS NOT NULL
	);

7 视图和表的区别

  • 视图和表的创建语法关键字不同(视图:CREATE VIEW,表:CREATE TABLE
  • 视图单纯保存了SQL逻辑,占用物理空间较小;表保存了逻辑和所有的数据,占用物理空间较大
  • 使用方面,视图和表都可以进行增删改查,但是,视图一般不能增删改,表可以进行所有的增删改查
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值