|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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";从而注入成功 |
|