# 视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表,是一个虚拟表。与物理表一样,视图包含行和列,视图中的字段就是来自一个或多个数据库中的真实的表中的字段。在视图中可以使用 select 语句查询数据,以及使用 insert、update、delete 语句修改记录,对于视图的操作最终转化为对基本数据表的操作。视图不仅可以方便操作,而且可以保障数据库系统的安全性。 测试数据 employees 表 ![](./static/images/05_01.png) ## 创建视图 ```sql --创建视图 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、视图的名称必须遵循标识符的规则,且对每个用户必须是唯一的。此外,该名称不得与该用户拥有的任何表的名称相同。 ```sql --查询视图 select * from employees_view; ``` ![](./static/images/07_01.png) ## 更新视图 ```sql insert into employees_view values('11080306', '胡大海', 34, 3818.38, '2000-12-01 15:38:00.000') ``` 结果: ![](./static/images/17_02.png) > 注意: > > 1、修改视图中的数据时,不能同时修改两个或者多个基表,可以对基于两个或多个基表或者视图的视图进行修改,但是每次修改都只能影响一个基表。 > > 2、不能修改那些通过计算得到的字段,例如包含计算值或者合计函数的字段。 > > 3、如果在创建视图时指定了 with check option 选项,那么使用视图修改数据库信息时,必须保证修改后的数据满足视图定义的范围。 > > 4、执行 update、delete 命令时,所删除与更新的数据必须包含在视图的结果集中。 > > 5、如果视图引用多个表时,无法用 delete 命令删除数据,若使用 update 命令则应与 insert 操作一样,被更新的列必须属于同一个表。 ## 撤销视图 ```sql drop view employees_view ``` > 语法说明: > > 1、只有视图拥有者或者有 DBA 权限的用户才能删除视图。 > > 2、删除视图不会影响基本表中的数据,但与该视图有关的所有授权将被自动撤销。 > > 3、如果该视图被其他视图引用,则删除了该视图后,虽然引用视图依然存在,但将不能正常运行。