触发器的分类2.DDL触发器(了解)DDL触发器是SQLServer2005新增的一种触发器,它在响应数据定义语言(DDL,create、alter和drop)语句时触发。添加、删除或修改数据库的对象,一旦误操作,可能导致大麻烦。如果想能够跟踪这种问题和定位问题的根源,就可以利用DDL触发器来记录类似“用户建立表”这种变化的操作,这样可以大大减轻跟踪和定位数据库模式的变化的繁琐程度。触发器的分类一般,在以下几种情况下可以使用DDL触发器:(1)数据库里的库架构或数据表架构很重要,不允许被修改(alter)。(2)防止数据库或数据表被误操作删除(drop)。(3)在修改某个数据表结构的同时修改另一个数据表的相应的结构(为了保持一致)。(4)要记录对数据库结构操作的事件。11.2.3创建触发器创建触发器需要注意的问题*:(1)CREATETRIGGER语句必须是批处理中的第一个语句,而且只能用于一个表或视图。(2)创建触发器的权限默认为表的所有者,不能将该权限转给其他用户。(3)触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。(4)虽然不能在临时表或系统表上创建触发器,但是触发器可以引用临时表。(5)TRUNCATETABLE语句不会激发DELETE触发器。创建触发器的方法1.在SQLServerManagementStudio中创建DML触发器展开要创建DML触发器的数据库和其中的表或视图(如student表),右键单击“触发器”选项,选择“新建触发器”命令。2.利用T-SQL语句创建触发器创建触发器的语法CREATETRIGGER创建触发器语法格式:CREATETRIGGERtrigger_nameON{table_name|view}[WITHENCRYPTION]{FOR|AFTER|INSTEADOF}{[INSERT][DELETE][UPDATE]}ASsql_statement[...n]--当插入、删除或修改表中数据时,触发的sql语句创建触发器的简单例子[例11-15]使用DDL触发器limited来防止数据库中的任一表被修改或删除(自定义错误提示)。USEteachingGOCREATETRIGGERlimitedONdatabaseFORDROP_TABLE,ALTER_TABLEASPRINT触发器不允许您执行对表的修改或删除操作!ROLLBACK触发语句:ALTERTABLEstudentADDbirthdaydatetime创建触发器的简单例子[例11-17]为学生表创建一个简单DML触发器,在插入和修改数据时,都会自动显示提示信息。USEteachingGOCREATETRIGGERreminderONstudentFORINSERT,UPDATEASprint你在插入或修改学生表的数据触发语句:UPDATEstudentSETsname=刘小梅WHEREsname=刘梅创建触发器的简单例子[例11-19]为学生表创建一个DML触发器,在插入和修改数据时,都会自动显示所有学生的信息。CREATETRIGGERprint_tableONstudentFORINSERT,UPDATEASselect*fromstudent触发语句:UPDATEstudentSETsname=刘梅WHEREsname=刘小梅创建触发器的简单例子[例11-21]在学生表上创建一个DELETE类型的触发器,删除数据时,显示删除学生的个数。CREATETRIGGERdel_countONstudentFORDELETEASDECLARE@countvarchar(50)SET@count=STR(@@ROWCOUNT)+个学生被删除SELECT@countRETURN触发语句:DELETEFROMstudentWHEREspecialty=计算机创建触发器SQLServer为每个DML触发器都定义了两个特殊的表,一个是插入表:Inserted,一个是删除表:Deleted。它们建在数据库服务器的内存中,是由系统管理的逻辑表,而不是真正存储在数据库中的物理表。对于这两个表,用户只有读取的权限,没有修改的权限。在触发器的执行过程中,SQLServer建立和管