视图是一种虚拟表 ,本身是不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念。
视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。
视图不会保存数据,数据真正保存在数据表中。当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化;反之亦然。
语法:
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图名称 [(字段列表)]
AS 查询语句
[WITH [CASCADED|LOCAL] CHECK OPTION]
或者
CREATE VIEW 视图名称 AS 查询语句
CREATE VIEW empvu80
AS
SELECT department_id,employee_id, last_name, salary
FROM employees
WHERE department_id = 80;
SELECT * FROM empvu80;
当我们创建好一张视图之后,还可以在它的基础上继续创建视图。
CREATE VIEW emp_dept_ysalary
AS
SELECT emp_dept.ename,dname,year_salary
FROM emp_dept INNER JOIN emp_year_salary
ON emp_dept.ename = emp_year_salary.ename;
语法1:查看数据库的表对象、视图对象
SHOW TABLES;
语法2:查看视图的结构
DESC / DESCRIBE 视图名称;
语法3:查看视图的属性信息
SHOW TABLE STATUS LIKE '视图名称'\G
语法4:查看视图的详细定义信息
SHOW CREATE VIEW 视图名称;
MySQL支持使用INSERT、UPDATE和DELETE语句对视图中的数据进行插入、更新和删除操作。当视图中的数据发生变化时,数据表中的数据也会发生变化,反之亦然。
举例:UPDATE操作
SELECT * FROM vu_emp1;
UPDATE vu_emp1
SET salary=20000
WHERE employee_id =101
SELECT * FROM vu_emp1;
举例:DELETE操作
SELECT last_name,tel FROM vu_emp1 WHERE last_name= 'King';
DELETE FROM vu_emp1 WHERE last_name= 'King';
要使视图可更新,视图中的行和底层基本表中的行之间必须存在 一对一 的关系。另外当视图定义出现如下情况时,视图不支持更新操作:
方式1:使用CREATE OR REPLACE VIEW 子句修改视图
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS
SELECT employee_id, first_name || ' ' || last_name, salary, department_id
FROM employees
WHERE department_id = 80;
方式2:ALTER VIEW
ALTER VIEW 视图名称 AS查询语句
DROP VIEW IF EXISTS 视图名称;
DROP VIEW IF EXISTS 视图名称1,视图名称2,视图名称3,...;
举例:
DROP VIEW vu_emp1;