基本介绍
视图概念:视图是一种虚拟存在的数据表,这个虚拟的表并不在数据库中实际存在。
本质:将一条 SELECT 查询语句的结果封装到了一个虚拟表中,所以在创建视图的时候,工作重心要放在这条 SELECT 查询语句上。
作用:将一些比较复杂的查询语句的结果,封装到一个虚拟表中,再有相同查询需求时,直接查询该虚拟表。
优点:
- 简单:使用视图的用户不需要关心表的结构、关联条件和筛选条件,因为虚拟表中已经是过滤好的结果集。
- 安全:使用视图的用户只能访问查询的结果集,对表的权限管理并不能限制到某个行某个列。
- 数据独立:一旦视图的结构确定,可以屏蔽表结构变化对用户的影响。源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。
视图创建
创建视图
创建视图的语法如下:
CREATE [OR REPLACE]
VIEW 视图名称 [(列名列表)]
AS 查询语句
[WITH [CASCADED | LOCAL] CHECK OPTION];
1、OR REPLACE:如果视图已经存在,则替换它。
2、列名列表:可选,指定视图的列名,如果不指定,则使用查询语句中的列名。
3、查询语句:定义视图的 SELECT 查询语句。
4、WITH [CASCADED | LOCAL] CHECK OPTION:决定是否允许更新数据使记录不再满足视图的条件。
- LOCAL:只要满足本视图的条件就可以更新。
- CASCADED:必须满足所有针对该视图的所有视图的条件才可以更新,默认值。
例如,创建一个视图 employee_view,只显示 id、name 和 salary 列:
create table employees
(id int primary key auto_increment,name varchar(20) not null,salary decimal(10, 2) not null
);
CREATE VIEW employee_view AS
SELECT id, name, salary
FROM employees;
视图查询
查询所有数据表和视图
SHOW TABLES;
SHOW TABLE STATUS [\G];
查询视图
SELECT * FROM 视图名称;
例如,查询 employee_view:
SELECT * FROM employee_view;
查询某个视图的创建语句
SHOW CREATE VIEW 视图名称;
例如,查询 employee_view 的创建语句:
SHOW CREATE VIEW employee_view;
视图修改
修改视图表中的数据
视图表数据修改会自动修改源表中的数据,因为更新的是视图中的基表中的数据。
UPDATE 视图名称 SET 列名 = 值 WHERE 条件;
例如,更新 employee_view 中 id 为 1 的员工的 salary:
UPDATE employee_view SET salary = 50000 WHERE id = 1;
修改视图的结构
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图名称 [(列名列表)]
AS 查询语句
[WITH [CASCADED | LOCAL] CHECK OPTION]
例如,将视图 employee_view 中的 id修改为 id_s:
ALTER VIEW employee_view AS
SELECT id AS id_s, name, salary
FROM employees;
视图删除
删除视图
DROP VIEW 视图名称;
例如,删除 employee_view:
DROP VIEW employee_view;
如果存在则删除
DROP VIEW IF EXISTS 视图名称;
例如,如果 employee_view 存在则删除:
DROP VIEW IF EXISTS employee_view;
总结
视图是一种非常有用的工具,可以帮助简化复杂的查询、提高数据安全性,并确保数据独立性。通过将复杂的查询封装在视图中,用户可以更方便地访问和操作数据,而不必关心底层表的结构和复杂性。视图的创建、查询、修改和删除都有相应的 SQL 语句,可以根据需要灵活使用。