数据库系列之T-SQL(触发器)
2015-02-08 22:14
162 查看
什么是触发器
触发器是一种特殊的存储过程,只能由事件驱动调用,而无法直接调用。触发器有什么用
当对数据库的相关对象(数据库、表、视图)进行某些特定的操作时,数据库会自动调用相应的触发器。无需再执行增删改或存储过程的操作,让程序更自动化。触发器怎么用
3.1 触发器的触发方式SQL Server 按触发器被激活的时机可分为后触发和替代触发两种触发方式
引起触发器执行的修改语句若违反了某种约束,后触发方式不会激活触发器,替代触发方式会激活触发器
(1)后触发
当引起触发器执行的修改语句执行,并通过各种约束检查后,才执行触发器,这种触发方式称为后触发
创建这种触发器使用AFTER或FOR关键字
后触发只能创建在表上,而不能创建在视图上
(2) 替代触发
当执行可引起触发器执行的修改语句时,停止该修改语句的执行,仅执行其触发器,这种触发方式称为替代触发
创建这种触发器使用INSTEAD OF关键字
替代触发可创建在表上,也可以创建在视图上
3.2 激活触发器时的临时表
每个触发器被激活时,系统都为它自动创建两个临时表
INSERTED表:需要添加或更新后的数据
DELETED表:需要删除或更新前的数据
这两个表的结构与被激活触发器的表结构相同
触发器执行完成后,这两个表将被自动删除
3.3 示例一:替代触发
Create trigger tri_dropCustomer on customers Instead of delete As delete from orders where customerid=( select customerid from deleted) delete from customers where customerid=( select customerid from deleted) go
3.4 示例二:后触发
create trigger tri_updateOrderdate on Orders after update as declare @oldOrderdate datetime declare @newOrderdate datetime select @oldOrderdate=orderdate from deleted select @newOrderdate=orderdate from inserted if @oldOrderdate<>@newOrderdate begin print '订单日期不能修改' rollback transaction end go
相关文章推荐
- 数据库基础系列之五:PL/SQL入门(2)
- SQLXML系列之一:SQLXML初体验——用XML代替SQL来操作数据库
- 高效的使用空间SQL操作空间数据库系列的PPT
- PHP相关系列 - PHP 数据库SQL语句安装组装类
- MySQL 数据库性能优化之SQL优化(这是 MySQL数据库性能优化专题 系列的第四篇文章)
- 得到一个数据库的触发器的sql
- SQL-SERVER数据库中的游标、存储过程和触发器 关键词 SQL-SERVER、游标、存储过程、触发器、高效处理数据
- 高效的使用空间SQL操作空间数据库系列之三
- 高效的使用空间SQL操作空间数据库系列之二
- sql得到一个数据库中的触发器的信息
- JSP初级系列--Eclipse3.21+SQl 2005 JDBC数据库连接配置方法
- 一条SQL语句查询数据库中的所有表、存储过程、触发器 (sysobjects表信息)
- SQL--数据库触发器
- 高效的使用空间SQL操作空间数据库系列之四
- 创建数据库、表、主外键、各种约束、存储过程、视图、索引、事务使用、触发器、创建登录账号、数据库用户 Sql语句示例
- [原创]SQLXML系列之一:SQLXML初体验——用XML代替SQL来操作数据库
- SQL-SERVER数据库中的游标、存储过程和触发器
- 数据库sql语句、存储过程、触发器
- Oracle中用sql查询获取数据库的所有触发器,所有存储过程,所有视图,所有表
- 两次SQL 学习之感悟——数据库查询语言——走进数据系列之十二