After触发器 视图 索引

计算数据操作时间
开始的时候一直想提高数据库查询的速率,但是苦于无法计算,所以就写出了一个样式代码,大家可以看一下,学索引的时候学的
use  master
go
declare   @time1   datetime
declare   @time2   datetime
select   @time1 = getdate ()
select   *   from  dbo.MSreplication_options  order   by  optname
select   @time2 = getdate ()
select   datediff (millisecond, @time1 , @time2
可以计算 次查询或者其他 操作时间了

  After触发器
原理:例如:当要删除一条记录z的时候,首先,SQL Server会在内存中建一个删除表,然后删除那条记录之后,会触发insert/update/delete事件(after触发器),最后再从内存中删除那个删除表,一个表中可以有多个触发器,而且顺序只能够确定First,和Last.这需要用一个存储过程来设置(后面介绍),
触发器语法:
create   trigger  触发器名
on  数据表名或视图名
after 
insert / update / delete
on
as
begin
     T_SQL语句(你要触发的事件)
end
当然看个通用语法,是不太可能懂的,所以我给出了一个实例
alter   trigger  Test1_insert
on  dbo.Test1
after 
insert -- -(1)
as
begin
   
set  nocount  on
   
declare   @username   nvarchar ( 50 )
   
declare   @testcount   int
    
select      @username = ( select  Test1_username  from  inserted) -- -(2)
     select   @testcount = ( select  Test1_count  from  inserted)
    
insert   into  dbo.Test  values ( @username , getdate ()) -- -(3)
end
GO
(1).是在想Test1表中插入数据的时候触发触发器,所以为insert
(2).在插入到表Test1表之前,在内存中,SQL Server创建了一个inserted表,和插入内容一样。
(3).触发触发器之后发生的事件。
当然如果有多个触发器的时候,系统有一个存储过程来设定触发器的执行顺序。
exec  sp_settriggerorder
触发器名,顺序
[ 只能为First,Last,None(有程序任意触发) ] ,激活触发器的动作
go

例如:
exec  sp_settriggerorder
' Test1_insert ' , ' First ' , ' insert ' -- ---(4)
go
(
4 ).要注意每个都是字符串格式
触发器的功能:

维护数据的一致性(可以练级删除,动态计数),可以很好的进行逻辑控制(假设老师的工资底线是4000,如果在插入的时候低于4000的全都变为4000),
貌似触发器与存储过程有好多的相似之处。

触发器的用途:

简单应用是:
1.一个社区系统,用户激活的时候,要在社区的每个栏目都插入一条用户数据。
2.相册系统中,在相册激活后,在相册用户表中插入一条记录,而且要在用户相册中插入一条记录(默认相册)
当然,这几个都是我在平时所遇到的。

视图:
在学习的过程中,我觉得要学一样技术,首先要知道它的原理和用途以及优点
以前一直以为视图只能查询,可是看了之后,才发现自己错了,不过对视图的编辑,我貌似没用过,
视图的原理是:视图并不是数据表,只是在外形上相似而已,它其实只是一张虚拟表,是对多个数据表的select结果。
现在来讲讲视图的优缺点:任何东西(包括人)都包括优缺两特性。

从性能上讲:对视图的一个简单的查询,都会被SQL Server转换为对数据表的复杂查询。所以在建视图的时候要权衡视图的复杂性。
如果只需对一个数据表的查询就不 要用多个表建成的视图了。因为会影响到性能的。
从修改限制上讲:对视图的修改,也同样会转换为对多个表的复杂操作,如果修改视图中的一条记录时, 涉及到了多个表的字段,那么就要注意了,很容易出现错误的。

当然多表构成的视图在查询的时候会写起来简单许多,没有过多的语句,减少出错的概率。

索引:

里面讲的很清楚,而且还有具体的实例。聚集索引还是要建,而且最好不要轻易的创建,不要建在主键ID上,因为它是递增的,系统不知道,所以要重头到尾的查询。速度会慢的。
数据库好比字典
 聚集索引好比字典正文中右边的A-Z,如果我们要找Z的话,可以直接找到字典后面,可以缩小搜索的范围(主键默认为聚集索引除外),而默认主键为聚集索引好比:字典已经按照顺序排好序了,但是右边没有A-Z,所以SQL SERVER会重头到尾的搜索,找到目标为止。
而非聚集索引好比:不知道字的发音,字典按偏旁来查找,SQL SERVER建一个索引表,像字典偏旁表,要先在偏旁表(偏旁表简单)中查找,然后映射到数据表中找到要查找的记录。
一个表只能有一个聚集索引,可以有多个非聚集索引,所以聚集索引要珍惜使用,在建非聚集索引的时候,要记住不要设用户经常更改的字段为非聚集索引,因为修改了字段的值,同时也会修改索引表里的值,会给SQL SERVER增加负担。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值