一、视图
视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预定义的查询select语句组成。
1、视图的特点
优点:
(1)为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理。
(2)屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。
(3)简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。
(4)便于数据共享。各用户不必都定义和存储自己所需的数据,可共享数据库的数据,这样同样的数据只需存储一次。
(5)可以重新组织数据以便输出到其他应用程序中。
缺点:
(1)性能差
sql server必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,sql server也要把它变成一个复杂的结合体,需要花费一定的时间。
( 2 )修改限制
当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的试图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。
2、创建视图
CREATE view v_s as(select * from student);
结果:
3、视图中数据的增删改查
3.1查询和正常表一样
3.2增删改的条件
详细参考该博客
注意:视图一般用于查询的,而不是更新的,所以具备以下特点的视图都不允许更新(插入、修改、删除)
1、包含以下关键字
分组函数 \ GROUP BY\ HAVING \UNION \UNION ALL
2、join
CREATE OR REPLACE VIEW myv4
AS
SELECT last_name, department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;
3、常量视图
CREATE OR REPLACE VIEW myv2
AS
SELECT 'john' NAME;
SELECT *
FROM myv2;
4、where后的子查询用到了from中的表
CREATE OR REPLACE VIEW myv6
AS
SELECT last_name, email, salary
FROM employees
WHERE employee_id IN (
SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL
);
5、用到了不可更新的视图
CREATE OR REPLACE VIEW myv5
AS
SELECT * FROM myv3;