5.1视图(针对的是数据库)
5.1.1 概念及特点
1).视图是一种数据库对象,是一个从一张表、多张表或视图中导出的虚表。视图的结构和数据是对数据表进行查询的结果。
2).视图仅存放视图的定义,不存放视图所对应的数据。
3).如果基表的数据发生改变,则视图中的数据也会随之改变。
5.1.2 优点
- 关注点聚焦
- 简化操作
- 定制数据
- 在合并分割数据时保持数据表原有结构关系
- 细粒化的安全机制
5.1.3 使用T-SQL创建视图
语法:
create view [ schema_name.] view_name
[ (column[,...n]) ]
as select_statement
5.1.4使用视图创建复杂查询
视图中的列不仅可以是基表的数据列,还可以是计算列或聚合函数列。
5.2 索引(针对表)
5.2.1 索引概述
1.定义
数据库中的索引是一个表中所包含值的列表,它注明了这些值所对应的存储位置。
2.价值
快速检索
3.作用
1). 创建唯一性索引,保证数据表中的每一行数据的唯一性;
2). 加快数据的检索速度;
3). 加速表与表之间的连接;
4). 减少查询中分组和排序的时间;
5). 优化隐藏器,提高系统性能。
4. 使用场合(在哪些地方创建索引)
在需要搜索的列、作为主键的列、用在连接的列、根据范围进行搜索的列、需要排序的列、where字句。
不应该创建索引的列:
1). 在查询中很少使用作为参考的列
2). 只有很少数据值的列
3). 定义为 text 、image 、bit 数据类型的列
4). 修改性能大于检索性能时
5.2.2 索引分类
以存储结构 (聚集索引、非聚集索引)、数据的唯一性、索引列的个数区分
5.2.3 创建索引
语法:create index 索引名
5.3 数据库事务
5.3.1 事务的概述
事务是一个由用户所定义的完整的工作单元,一个事务内的所有语句作为一个整体来执行。
5.3.2 事务特性
原子性、一致性、隔离性、持久性
5.3.3 事务的分类
1.显示事务
1). begin transaction : 开启事务
2). commit transaction : 提交事务
3). rollback transaction: 回滚事务
2.隐式事务
不需要使用 begin transaction 语句启动事务,仅需要用户 commit transaction 提交事务或rollback transaction 回滚事务。
执行 set implicit_transactions on 语句可使SQL sever 进入隐式事务模式。
3.自动提交事务
其是默认事务模式,将每个T-SQL语句都视为一个事务。
5.3.4 SQL sever 事务应用
客户“ 雷亚波 ” 在“ 零聚网 ” 购买了两份“ 菠萝爆炒肉片 ” 和一份“ 资生堂菲婷 ” ,编写存储过程实现该业务。
5.4 触发器
1.优点
(1)触发器是自动的。当对表中的数据做了任何修改之后立即被激活。
(2)触发器可以通过数据库中的相关表进行层叠修改。
(3)触发器可以强制限制,这些限制比用check约束所定义的更复杂。与check约束不同的是,触发器可以引用其他表中的列。
2.触发器的主要作用
触发器的主要作用就是其能够实现由主键和外键所不能保证的数据一致性和较为复杂的参照完整性,它能够对数据库中的相关表进行级联修改,提高check约束更复杂的数据完整性,并自定义错误消息。
主要作用
(1)强制数据库间的引用完整性。
(2)级联修改数据库中所有相关的表,自动触发其他与之相关的操作。
(3)跟踪变化,撤销或回滚违法操作,防止非法修改数据。
(4)返回自定义的错误消息,约束无法返回信息,而触发器可以。
(5)触发器可以调用更多的存储过程。
3.语法:
create trigger trigger_ name on table_ name
for | after | instead of delete | insert | update
as
sql_ statement
4.inserted 表和 deleted 表
这两个表的结构总是与被该触发器作用的表的结构相同。
作用:
1). inserted表存放在由于执行insert或update语句而要向表中插入的所有行。
2). deleted表存放在由于执行delete或update语句而要从表中删除的所有行。
5.4.2 instead of 触发器和 after 触发器
1. instead of 触发器特点
instead of 触发器的动作要早于表的约束处理。
instead of 触发器不仅可以在表上定义,还可以带有一个或多个基表的视图上定义,但在作为级联引用实现完整性约束目标的表上限制应用。
2. after 触发器特点
after 触发器只能在表上指定,且动作晚于约束处理。
每一个表上只能创建一个 instead of 触发器,但可以创建多个 after 触发器。