视图的理解
- 视图可以看作是一个虚拟表,本身是不存储数据的,视图的本质就是存储起来的SELECT语句。
- 视图SELECT语句中涉及到的表称为基表。
- 针对视图做DML操作会影响到对应的基表中的数据,反之亦然。
- 视图本身的删除,不会导致基本中的数据被删除。
- 视图的应用场景:针对小型项目,不推荐使用视图。针对大型项目,可以考虑使用视图。
- 视图的优点:简化查询,控制数据的访问。
创建视图
精简版
CREATE VIEW 视图名称
AS 查询语句
举例:
CREATE VIEW vu_emp1
AS
SELECT employee_id,last_name,salary
FROM emps;
如果没指定字段的名称,则视图字段中的名字和SELECT中的字段名称相同。
如果SELECT中指定了别名,则视图中的字段名称为指定的别名。
# SELECT语句中的别名会作为视图字段的名称
CREATE VIEW vu_emp2
AS
SELECT employee_id emp_id,last_name lname,salary
FROM emps
WHERE salary > 8000;
也可以使用以下方式指定视图中字段的名称
# 小括号内字段个数与SELECT中字段个数相同
CREATE VIEW vu_emp3(emp_id,NAME,monthly_sal)
AS
SELECT employee_id,last_name,salary
FROM emps
WHERE salary > 8000;
注意:==小括号内字段的个数要与SELECT中的字段个数相同。==
多表创建视图
CREATE VIEW vu_emp_dept
AS
SELECT e.employee_id, d.department_id, d.department_name
FROM emps e JOIN depts d
ON e.`department_id`=d.`department_id`
基于视图创建视图
CREATE VIEW vu_emp4
AS
SELECT employee_id,last_name
FROM vu_emp1;
查看视图
语法1:查看数据库的表对象、视图对象。
SHOW TABLES;
语法2:查看视图的结构。
DESC vu_emp1;
语法3:查看视图的属性信息。
SHOW TABLE STATUS LIKE 'vu_emp4';
语法4:查看视图的详细定义信息。
SHOW CREATE VIEW vu_emp4;
更新视图中的数据
UPDATE vu_emp1
SET salary = 20000
WHERE employee_id = 101;
更新视图中的数据会改基表中的数据,同理,更改基本中的数据也会更改视图中的数据。
删除视图中的数据,基表中的数据也会被删除掉,反之亦然。
DELETE FROM vu_emp1
WHERE employee_id = 101;
==不是所有的视图更新都能成功==
例如:集合函数
修改视图
# 方式1
CREATE OR REPLACE VIEW vu_emp1
AS
SELECT employee_id,last_name,salary,email
FROM emps
WHERE salary > 7000;
# 方式2
ALTER VIEW vu_emp1
AS
SELECT employee_id,last_name,salary,email,hire_date
FROM emps;
删除视图
DROP VIEW vu_emp4;
DROP VIEW IF EXISTS vu_emp2,vu_emp3;
Q.E.D.