MySQL高级开发中视图的详细教程
一、视图是什么?
视图(View)是一种虚拟存在的表,具有表的特性,使用时与表完全相同,但与表不同的是,它没有实际的数据存储。
其中,视图是使用SQL语句查询语句产生的结果集并进行存储的,也可以是其他视图的基础上进行定义
二、视图的类型
MySQL中视图分为以下两种:
-
普通视图(Non-updatable Views):只能进行 SELECT 操作,不能进行 UPDATE 和 DELETE 操作
-
可更新视图(Updatable Views):可以进行 SELECT、UPDATE 和 DELETE 操作。
三、如何创建视图?
3.1 创建普通视图
CREATE VIEW view_name AS select_statement;
其中,view_name 是视图的名称,在后续的查询中可以将其作为表名来使用。
select_statement 是查询语句,用于生成视图中的数据集。
示例:
-- 创建一个简单的普通视图,查出所有雇员的姓名和部门名称
CREATE VIEW emp_dept AS
select e.`last_name`, d.`department_name`
from employees e join departments d on e.`department_id` = d.`department_id`;
3.2 创建可更新视图
创建可更新视图需要满足以下条件:
-
视图的 SELECT 语句中只使用了单表,而且没有使用聚集函数;
-
视图定义中不包含以下的关键字或子查询:DISTINCT、GROUP BY、HAVING、UNION、UNION ALL、SUBQUERY;
-
视图的 SELECT 语句中只使用了 MySQL 支持的特定函数。
在满足条件后,使用以下语法创建可更新视图:
CREATE OR REPLACE VIEW view_name AS select_statement WITH [CASCADED|LOCAL] CHECK OPTION;
其中,view_name 是视图的名称,在后续的查询中可以将其作为表名来使用。
select_statement 是查询语句,用于生成视图中的数据集。
WITH CHECK OPTION 是为了保证可更新视图的数据完整性。如果不加 WITH CHECK OPTION,则视图也能够更新与过滤条件不符的 数据值,而加了 WITH CHECK OPTION 之后,则只能更新与过滤条件相符 的数据值。
示例:
-- 基于employees表创建一个可更新视图emp_update,
-- 对其进行SELECT、INSERT、DELETE、UPDATE操作时,会影响到原表
CREATE OR REPLACE VIEW emp_update AS
select `employee_id`, `first_name`, `last_name`, `email`,`phone_number`, `hire_date`
from employees
where department_id = 90
WITH CHECK OPTION;
--往emp_update中插入一条记录
insert into emp_update(`employee_id`, `first_name`, `last_name`, `email`,`phone_number`, `hire_date`)
values(99999, 'Test', 'Query', null, null, '2021-01-01');
--更新emp_update中最后一条记录
update emp_update set `phone_number` = '123456789' order by `employee_id` desc limit 1;
--删除表格中employee_id=99999的这条记录
delete from emp_update where employee_id = 99999;
四、使用视图的注意事项
-
视图可以使用JOIN查询语句进行操作;
-
可以在视图视图上创建索引;
-
视图的更新操作需要满足可更新视图的限制条件;
-
视图使用完后需要及时删除,以免因更新源数据而导致的后续查询错误。
综上所述,视图是数据库中一个非常有用的工具。使用视图不仅可以避免冗余查询,还可以有效地提升查询效率,并且还能够操作虚拟表,从而更便捷地进行管理和维护数据库。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL高级开发中视图的详细教程 - Python技术站