数据库里的触发器怎么建(sql图书管理系统触发器如何创建?)
如何实现数据库的触发器功能?
MySQL中的触发器由插入、更新和删除等事件触发。如果满足触发器条件,数据库将执行触发器中定义的程序语句,触发器的执行语句可能只有一条或多条。
在数据库世界中找到“触发器”,右键“创建触发器”,弹出并输入新的触发器名称,填写名称“city_trigger”,执行insert语句,结果成功;然后,查询t_tri_time数据库表。
sql图书管理系统触发器如何创建?
创建一个触发器,这是一个特殊的存储过程,当用户试图对指定的表执行指定的数据修改语句时,会自动执行该过程。Microsoft SQL Server允许为任何给定的INSERT、UPDATE或DELETE语句创建多个触发器。
语法
创建触发器trigger_name
在{表格|视图}上
[带加密]
{
{ { FOR | AFTER | INSTEAD OF } { [插入] [,] [更新] }
[带追加]
[不用于复制]
如同
[ {如果更新(列)
[ {和|或}更新(列)]
[.n ]
| IF(COLUMNS _ UPDATED(){ bitwise _ } UPDATED _ bit mask)
{比较_运算符}列_位掩码[.n ]
} ]
sql_statement [.n ]
}
}
参数
触发器名称
触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须是唯一的。您可以选择是否指定触发器所有者名称。
表格|视图
是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。您可以选择是否指定表或视图的所有者名称。
带加密
加密syscomments表中包含CREATE TRIGGER语句文本的条目。使用WITH ENCRYPTION可防止触发器作为SQL Server复制的一部分发布。
在.之后
指定只有在trigger SQL语句中指定的所有操作都已成功执行后才触发触发器。在执行此触发器之前,还必须成功完成所有引用级联操作和约束检查。
如果只指定了FOR关键字,则AFTER是默认设置。
不能在视图上定义AFTER触发器。
代替
指定执行触发器而不是触发器SQL语句,从而替换触发器语句的操作。
在表或视图中,每个INSERT、UPDATE或DELETE语句最多只能定义一个INSTEAD OF触发器。但是,您可以在每个具有INSTEAD OF触发器的视图上定义视图。
不能在带有CHECK选项的可更新视图上定义INSTEAD OF触发器。如果向指定了WITH CHECK选项的可更新视图添加INSTEAD OF触发器,SQL Server将生成错误。用户必须使用ALTER VIEW删除此选项,然后才能定义INSTEAD OF触发器。
{[删除] [,] [插入][,][更新] }
是一个关键字,指定在表或视图上执行时,哪些数据修改语句将激活触发器。您必须至少指定一个选项。这些关键字在触发器定义中允许以任何顺序出现。如果指定了多个选项,请用逗号分隔它们。
对于INSTEAD OF触发器,在具有ON DELETE级联操作引用的表上不允许使用DELETE选项。同样,对于引用关系为ON UPDATE cascade operation的表,不允许使用UPDATE选项。
带附加
指定应添加现有类型的其他触发器。仅当兼容级别为65或更低时,才需要此可选子句。如果兼容级别为70或更高,则没有必要使用WITH APPEND子句添加现有类型的其他触发器(这是兼容级别设置为70或更高的CREATE TRIGGER的默认行为)。有关更多信息,请参见sp_dbcmptlevel。
WITH APPEND不能与INSTEAD OF trigger一起使用,或者如果显式声明了AFTER trigger,则不能使用此子句。只有在为了向后兼容而指定FOR时,才能使用WITH APPEND(没有INSTEAD OF或AFTER)。未来版本将不支持WITH APPEND和FOR(将被解释为AFTER)。
不用于复制
指示当复制进程更改触发器中涉及的表时,不应执行触发器。
如同
是触发器要执行的操作。
sql _语句
是触发器的条件和操作。触发条件指定其他标准来确定DELETE、INSERT或UPDATE语句是否会导致触发操作。
当尝试删除、插入或更新操作时,Transact-SQL语句中指定的触发器操作将生效。
触发器可以包含任意数量和种类的Transact-SQL语句。触发器被设计成根据数据修改语句来检查或改变数据;它不应该向用户返回数据。触发器中的Transact-SQL语句通常包含控制流语言。CREATE TRIGGER语句中使用了几个特殊的表:
删除和插入的是逻辑(概念)表。这些表在结构上类似于定义触发器的表(即尝试用户操作的表);这些表用于存储可能被用户操作更改的行的旧值或新值。例如,要检索已删除表中的所有值,请使用:
选择*
从已删除
如果兼容级别等于70,SQL Server将不允许在delete、insert或UPDATE触发器中引用INSERTed和DELETEd表中的text、ntext或image列。插入和删除的表中的Text、ntext和image值。若要在INSERT或UPDATE触发器中检索新值,请将插入的表与原始更新表联接起来。当兼容级别为65或更低时,在插入或删除的表中允许空值的text、ntext或image列将返回空值。如果这些列不能为空,则返回零长度字符串。
当兼容级别为80或更高时,SQL Server允许通过INSTEAD OF触发器更新表或视图中的text、ntext或image列。
n
是一个占位符,指示触发器可以包含多个Transact-SQL语句。对于IF UPDATE (column)语句,可以通过重复UPDATE (column)子句来包含多个列。
如果更新(列)
测试对指定列的插入或更新操作,该操作不能用于删除操作。可以指定多个列。因为表名是在ON子句中指定的,所以在IF UPDATE子句中,不要在列名之前包含表名。若要测试对多个列的插入或更新操作,请在第一个操作后指定一个单独的UPDATE(column)子句。IF UPDATE将在插入操作中返回TRUE值,因为这些列插入显式值或隐式(NULL)值。
解释IF UPDATE (column)子句的功能等同于IF,IF.ELSE或WHILE语句,并且可以使用BEGIN.END语句块。有关更多信息,请参见控制流语言。
您可以在触发器主体的任何地方使用UPDATE (column)。
圆柱
要测试插入或更新操作的列的名称。该列可以是SQL Server支持的任何数据类型。但是,计算列不能在这种环境中使用。有关更多信息,请参见数据类型。
IF (COLUMNS_UPDATED())
测试所提到的列是否已入或更新,并且仅在插入或更新触发器中使用。COLUMNS_UPDATED返回varbinary位模式,指示表中插入或更新了哪些列。
COLUMNS_UPDATED函数从左到右返回位,最低有效位在左边。最左边的位代表表中的第一列;右边的下一位表示第二列,依此类推。如果在表上创建的触发器包含8个以上的列,COLUMNS_UPDATED将返回多个字节,最左边的字节最不重要。在插入操作中,COLUMNS_UPDATED将为所有列返回TRUE值,因为这些列插入了显式值或隐式(NULL)值。
您可以在触发器主体的任何地方使用COLUMNS_UPDATED。
按位运算符
是用于比较运算的位运算符。
updated _位掩码
表示实际更新或插入的列的整数位掩码。例如,表t1包含C1、C2、C3、C4和C5列。假设在表t1上有一个更新触发器,为了检查列C2、C3和C4是否都被更新,指定值14;若要检查是否只更新了列C2,请将值指定为2。
比较_运算符
是一个比较运算符。使用等号(=)检查updated_bitmask中指定的所有列是否都已实际更新。使用大于号(gt)检查updated_bitmask中指定的任何或某些列是否已被更新。
列_位掩码
是要检查的列的整数位掩码,用于检查这些列是否已被更新或插入。
给…作注解
触发器通常用于实施业务规则和数据完整性。SQL Server通过表创建语句(ALTER TABLE和CREATE TABLE)提供声明性参照完整性(DRI);但是,DRI不提供数据库之间的引用完整性。要实施参照完整性(关于表的主键和外键之间关系的规则),请使用主键和外键约束(ALTER TABLE和CREATE TABLE的主键和外键关键字)。如果触发器表中有约束,则在INSTEAD OF触发器执行之后和触发器执行之前检查这些约束。如果违反了约束,INSTEAD OF触发器操作将回滚,并且不会执行(触发)AFTER触发器。
可以使用sp_settriggerorder来指定表上第一个和最后一个执行的AFTER触发器。对于表上的每个插入、更新和删除操作,只能为第一次执行和最后一次执行指定一个AFTER触发器。如果在同一个表上有其他AFTER触发器,它们将以随机顺序执行。
如果ALTER TRIGGER语句更改了第一个或最后一个触发器,则修改后的触发器上的第一个或最后一个功能集将被删除,排序值必须用sp_settriggerorder重置。
只有在成功执行触发SQL语句(包括所有与更新或删除的对象相关联的引用级联操作和约束检查)后,才会执行AFTER触发器。AFTER trigger检查trigger语句的运行效果,以及由trigger语句引起的更新和删除引用的所有级联操作的效果。
触发极限
CREATE TRIGGER必须是批处理中的第一条语句,并且只能应用于一个表。
只能在当前数据库中创建触发器,但是触发器可以引用当前数据库中的外部对象。
如果指定触发器所有者名称来限定触发器,则以同样的方式限定表名。
在同一个CREATE TRIGGER语句中,可以为多个用户操作定义同一个触发器操作,如INSERT和UPDATE。
如果表的外键在删除/更新操作上定义了cascade,则不能在表上定义INSTEAD OF DELETE/UPDATE触发器。
可以在触发器中指定任何SET语句。所选的SET选项在触发器执行期间有效,并在触发器执行后恢复到以前的设置。
与存储过程一样,当触发器触发时,应用程序被调用。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。