wanglilin преди 3 години
родител
ревизия
1c331b2eaa
променени са 3 файла, в които са добавени 73 реда и са изтрити 1 реда
  1. 73 1
      sql/07.preview.md
  2. BIN
      sql/static/images/07_01.png
  3. BIN
      sql/static/images/17_02.png

+ 73 - 1
sql/07.preview.md

@@ -1 +1,73 @@
-# 视图
+# 视图
+
+在 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、如果该视图被其他视图引用,则删除了该视图后,虽然引用视图依然存在,但将不能正常运行。

BIN
sql/static/images/07_01.png


BIN
sql/static/images/17_02.png