经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » MS SQL Server » 查看文章
SQL Server基础之表级触发器
来源:cnblogs  作者:刀奈特程序员  时间:2018/9/25 19:52:04  对本文有异议

  触发器分为两种,一种与数据表绑定,响应数据表指定动作(insertdeleteupdate),此处称为表级;一种与数据库本身绑定,响应数据定义语句(主要是CREATEALTER  DROP 开头的语句),此处称为库级。本篇以下所说触发器皆指表级触发器。

  触发器是一段有特定语法,实现一定功能的SQL语句,它与数据表绑定,当数据表发生指定动作(insertdeleteupdate)时,由数据库自动调用。一个触发器必须且只能绑定一张数据表,必须且只能绑定数据表的一个动作(insertdeleteupdate)。触发器可以分为两种,一种是动作之后(After),一种是替代执行(instead of)。两种触发器可以同时绑定数据表的同一个动作(insertdeleteupdate)。但动作之后(After)触发器可以同时绑定多个,而替代执行(instead of)触发器一个数据表只能绑定三个,即一个动作(insertdeleteupdate)只能绑定一个。

  触发器耗费性能,不易调试,不利于迁移,不符合时兴的面向对象设计理念,也不容易被接手老项目的人注意到,因而尽量避免使用。

触发器语法:

  1. 创建:
  2. CREATE TRIGGER trigger_name --触发器的名字
  3. ON {table_name | view_name} --与触发器绑定的表或视图,必须且只能与一个表或视图绑定
  4. {FOR | After | Instead of } --触发器类型,动作之后(After)或替代执行(instead of
  5. [ insert, update,delete ] --触发器响应的具体动作,一个触发器只能响应一个动作
  6. AS
  7. sql_statement --你需要编写的SQL语句
  1. 删除:
  2. DROP TRIGGER { trigger/*要删除的触发器名字*/ } [ ,...n ]
  1. 修改:
  2. ALTER TRIGGER trigger_name --触发器的名字
  3. ON table_name --与触发器绑定的表或视图,必须且只能与一个表或视图绑定
  4. {FOR | After | Instead of } --触发器类型,动作之后(After)或替代执行(instead of
  5. {[DELETE][,][INSERT][,][UPDATE]}--触发器响应具体动作,一个触发器只能响应一个动作
  6.  
  7. AS
  8. sql_statement; --你需要编写的SQL语句
  1. 禁用启用触发器:
  2.   禁用:alter table 表名 disable trigger 触发器名称
  3.   启用:alter table 表名 enable trigger 触发器名称

   触发器执行后会自动创建两张虚表inserteddeleted。它们可以理解为系统自动创建的、在触发器中使用的临时表,触发器开始时创建,结束后删除。它们的结构与触发器绑定的表结构一致,并且是只读的。

动作

Inserted

Deleted

增加(insert

存放增加的记录

删除(delete

存放被删除的记录

修改(update

存放更新后的记录

存放更新前的记录

 

 

 

 

 

 

 

  当数据表只存在动作之后(After)触发器时,动作(insertdeleteupdate)对数据表进行真实更改,而存在替代执行(instead of)触发器时,动作(insertdeleteupdate)不对数据表进行真实更改。替代执行(instead of)触发器执行时间先于动作之后(After)触发器。有多个动作之后(After)触发器时,执行顺序取决于触发器建立时间,先建立的先执行。

    触发器中不能使用以下语句:

  1. CREATE 语句,如:CREATE DATABASECREATE TABLECREATE INDEX 等。
  2. ALTER 语句,如:ALTER DATABASEALTER TABLEALTER INDEX 等。
  3. DROP 语句,如:DROP DATABASEDROP TABLEDROP INDEX 等。
  4. DISK 语句,如:DISK INITDISK RESIZE
  5. LOAD 语句,如:LOAD DATABASELOAD LOG
  6. RESTORE 语句,如:RESTORE DATABASERESTORE LOG

 

=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号