仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 835|回复: 7
打印 上一主题 下一主题

[学习教程] DML触发器与DDL触发器详解

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:18:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。先懂得一下触发器:
触发器实在就是一个特别的存储历程,由于它和存储历程有一样的特性,都是预用写好的Sql命令存储在SqlServer服务器中。触发器在指定的表中的数据产生变更的时分会主动执
行。它与存储历程的区分也在此,由于存储历程是必要我们用命令往挪用的。

在SqlServer2005之前,是没有DDL触发器的,我们要晓得,DDL触发器是SqlServer2005新增的触发器。

DML触发器:
当数据库中表中的数据产生变更时,包含insert,update,delete恣意操纵,假如我们对该表写了对应的DML触发器,那末该触发器主动实行。DML触发器的次要感化在于强迫实行业
务划定规矩,和扩大SqlServer束缚,默许值等。由于我们晓得束缚只能束缚统一个表中的数据,而触发器中则能够实行恣意Sql命令。
一个复杂的例子,我们想要在送货后削减库存的数目,那我们就能够在送货单的表上写update触发器,用来削减库存的数目。

DDL触发器:
它是SqlServer2005新增的触发器,次要用于考核与标准对数据库中表,触发器,视图等布局上的操纵。好比在修正表,修正列,新增表,新增列等。它在数据库布局产生变更时
实行,我们次要用它来纪录数据库的修正历程,和限定程序员对数据库的修正,好比不同意删除某些指定表等。


DML触发器具体申明:
后面有说了DML触发器与DML触发器的界说及一些基础感化。如今我们来具体懂得一下我们用的最多的DML触发器。

DML触发器在实行按次上我们又能够将它分为两类,一是在insert,update,delete语句实行后触发的触发器,也就是after触发器,该类触发器是我们用的最多的。大概我们在网上一些示例中看到有效for界说的触发器,基有用after界说与for界说都一样,只是for是SqlServer初期版本独一可以使用的选项,编纂如今已不必了。

注重:after触发器只能在表上指定,且在该类触发器中不同意利用text,ntext,image列。

复杂示例:
createtriggerti_tb1afterinsert
as
if@@rowcount=0return;
setnocounton
--详细触发器内容
setnocounfoff


第二类是在insert,update,delete语句实行前触发的触发器,也就是insteadof触发器,这类触发器大概界说在一个或多个基表上的视图上。

注重:统一表统一个实行范例,只能创立一个insteadof触发器,也就是说一个表只能一个拔出前触发器,一个修正前触发器,一个删除前触发器,而after则不限定数目,在该触发器中可使用text,ntext,image列。

出格主要:在insteadof触发器中会中止insert,update,delete操纵。也就是说,假如你想要在某表实行完insteadofinsert触发器后持续实行拔出举措,你必需在insteadofinsert触发器中再写一次拔出语句.

复杂示例:
createtriggerti_tb1insteadofinsert
as
if@@rowcount=0return;
setnocounton
--详细触发器内容
--该触发器会中止insert命令,假如你想在实行完该触发器后持续实行拔出命令,你必需再写一次拔出语句,如
--inserttb1(col1,col2)
--selectcol1,col2frominserted

setnocounfoff


以上代码为编纂在记事本中写的,未在查询剖析器中考证,大概会存在关头字写错的情形,请读者本人调剂。mysql使用内部操作字符集gbk来进行操作,即执行"SELECT*FROMtestWHEREname=xxxor1=1/*LIMIT1";从而注入成功
再现理想 该用户已被删除
沙发
发表于 2015-1-18 12:43:21 | 只看该作者
换言之,只有在不断的失败中尝试成功,而关于失败的总结却是很少的
再见西城 该用户已被删除
板凳
发表于 2015-1-25 18:02:49 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
谁可相欹 该用户已被删除
地板
发表于 2015-2-3 12:51:06 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
admin 该用户已被删除
5#
发表于 2015-2-26 19:36:42 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-8 17:20:33 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
只想知道 该用户已被删除
7#
发表于 2015-3-16 08:26:19 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
不帅 该用户已被删除
8#
发表于 2015-3-22 21:58:06 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表