关于视图
1.概述
- 视图是一种虚拟表,它是基于 SQL 查询语句定义的结果集。
- 与实际表类似,视图也包含列和行数据。
- 但是这些数据并不存在于数据库中,而是通过查询、计算或者连接其他表生成。
2.语法
-
定义视图需要使用
create view
语句。 -
create view view_name as select cloumn... from table_name;
3.作用
- 通过创建视图,可以简化复杂的查询,重构数据模型。
- 确保数据安全性,并且方便用户访问数据。
- 可将多个表中的信息整合在一起,减少编写 SQL 查询语句的工作量。
基本用法
0.准备工作
-
创建示例数据库
create database view_db;
-
准备操作表
create table view_emp as select * from northwind.employees; create table view_dept as select * from northwind.departments;
1.创建视图
-
针对于单表
-
视图中的字段与基表的字段有对应关系
/*确定视图中字段名的方式 *1.默认与所选择的基表的字段相同 *2.查询语句中字段的别名会作为视图中字段的名称出现 *3.小括号内字段个数与 select 中字段个数相同 */ # 1.默认与所选择的基表的字段相同 create view v_emp1 as select employee_id, first_name, salary from view_emp; # 查询语句中字段的别名会作为视图中字段的名称出现 create view v_emp2 as select employee_id as emp_id, first_name as name, salary from view_emp; # 小括号内字段个数与 select 中字段个数相同 create view v_emp3(emp_id, name, salary) as select employee_id, first_name, salary from view_emp;
-
视图中的字段在基表中可能没有对应的字段
create view v_emp4 as select department_id, avg(salary) avg_sal from view_emp where department_id is not null group by department_id;
-
-
针对于多表
-
通过表连接的方式对基于多表创建视图。
-
create view v_emp_dept as select e.employee_id, e.department_id, d.department_name from view_emp as e join view_dept as d on e.department_id = d.department_id;
-
-
基于视图创建视图
-
基于一个或多个视图来创建新的视图,被称为嵌套视图。
-
同样也可以基于多个视图创建视图。
-
create view v_emp5 as select employee_id, first_name from v_emp1;
-
2.查看视图
-
查看表时也会显示出视图
show tables from view_db;
-
查看视图对象
# 这条 SQL 语句的含义是查询数据库中所有视图的信息,并选取其中数据库名为 'view_db' 的视图。 # 通过\G按格式输出,并代替了分号 select * from information_schema.views where table_schema = 'view_db'\G
-
查看视图的结构
describe v_emp3;
-
查看视图的属性信息
show table status from view_db like 'v_emp4';
-
查看视图的详细定义信息
show create view v_emp5;
3.修改视图中的数据
-
将视图看做表进行更新修改,操作相同。
-
更新视图的数据,会导致基表中数据的修改。
-
同理,更新表中的数据,也会导致视图中数据的修改。
-
删除视图中的数据,也会导致表中的数据的删除。
-
删除视图也与删除表的操作相同。
4.修改视图
-
使用
alter
语句修改已经存在的视图。alter view v_emp1 as select employee_id, first_name, salary, email, hire_date from view_emp;
-
通过
replace
关键字进行修改create or replace view v_emp1 as select employee_id, first_name, salary, email from view_emp;
那平淡如水的生活,因为你而火热。 —— 新裤子《生命因你而火热》