在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表,是一个虚拟表。与物理表一样,视图包含行和列,视图中的字段就是来自一个或多个数据库中的真实的表中的字段。在视图中可以使用 select 语句查询数据,以及使用 insert、update、delete 语句修改记录,对于视图的操作最终转化为对基本数据表的操作。视图不仅可以方便操作,而且可以保障数据库系统的安全性。
测试数据 employees 表
--创建视图
create view employees_view
as
select number, name, age from employees where age is not null
注意:
1、在视图中最多只能引用1024列,视图中记录的数目限制只由其基表中的记录数决定。
2、如果视图引用中的基表或者视图被删除,则该视图不能再被使用,直到创建新的基表或者视图。
3、如果视图中某一列是函数、数学表达式、常量或者来自多个表的列名相同,则必须为列定义名称。
4、不能在视图上创建索引,不能再规则、默认、触发器的都定义中引用视图。
5、当通过视图查询数据时,SQL Server 要检查以确保语句中涉及的所有数据库对象存在,每个数据库对象在语句的上下文中有效,而且数据修改语句不能违反数据完整性规则。
6、视图的名称必须遵循标识符的规则,且对每个用户必须是唯一的。此外,该名称不得与该用户拥有的任何表的名称相同。
--查询视图
select * from employees_view;
insert into employees_view values('11080306', '胡大海', 34, 3818.38, '2000-12-01 15:38:00.000')
结果:
注意:
1、修改视图中的数据时,不能同时修改两个或者多个基表,可以对基于两个或多个基表或者视图的视图进行修改,但是每次修改都只能影响一个基表。
2、不能修改那些通过计算得到的字段,例如包含计算值或者合计函数的字段。
3、如果在创建视图时指定了 with check option 选项,那么使用视图修改数据库信息时,必须保证修改后的数据满足视图定义的范围。
4、执行 update、delete 命令时,所删除与更新的数据必须包含在视图的结果集中。
5、如果视图引用多个表时,无法用 delete 命令删除数据,若使用 update 命令则应与 insert 操作一样,被更新的列必须属于同一个表。
drop view employees_view
语法说明:
1、只有视图拥有者或者有 DBA 权限的用户才能删除视图。
2、删除视图不会影响基本表中的数据,但与该视图有关的所有授权将被自动撤销。
3、如果该视图被其他视图引用,则删除了该视图后,虽然引用视图依然存在,但将不能正常运行。