`
xiaoheliushuiya
  • 浏览: 402166 次
文章分类
社区版块
存档分类
最新评论

数据库综合系列 之 触发器

 
阅读更多

触发器是一个特殊存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。

触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。

DML触发器分为:

1、 after触发器(之后触发)

a、 insert触发器

b、 update触发器

c、 delete触发器

2、 instead of 触发器 (之前触发)

其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。

触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。

对表的操作

Inserted逻辑表

Deleted逻辑表

增加记录(insert)

存放增加的记录

删除记录(delete)

存放被删除的记录

修改记录(update)

存放更新后的记录

存放更新前的记录

Update数据的时候就是先删除表记录,然后增加一条记录。这样在inserted和deleted表就都有update后的数据记录了。注意的是:触发器本身就是一个事务,所以在触发器里面可以对修改数据进行一些特殊的检查。如果不满足可以利用事务回滚,撤销操作。


作用:

a.允许/限制对表的修改

b.自动派生列,如自增字段

c.强制数据的一致性

d.提供审计和日志记录

e.防止无效的事务处理

f.启动复杂的业务逻辑


几个具体示例: instead of和after类似

1 创建insert类型触发器

--创建insert插入类型触发器
if (object_id('tgr_classes_insert', 'tr') is not null)
    drop trigger tgr_classes_insert
go
create trigger tgr_classes_insert
on manage
    for insert --插入触发
as
    --定义变量
    declare  @name varchar(20), @temp varchar(20);
    --在inserted表中查询已经插入记录信息
    select  @name = m_name,@temp=m_password from inserted;
    set @name = @name + 'buyingfei';
    insert into t_director values(@name, @temp,'男','2010-10-10','11111111112',1);
    print '添加成功!';

执行:

insert into manage values('经理','11111111112','男','2010-10-10','11111111112',2)


2 创建delete触发器

CREATE TRIGGER t1 ON  manage
for delete
AS 
If  (select count(*) from t_cash_housewoker  where m_id=t_cash_housewoker.m_id)>0
    BEGIN      
      Rollback tran
      Print 'the manager is userful, you can not delete it'     
   END	

触发语句:

delete from manage where m_id='3'

3 创建update触发器

if (object_id('tgr_classes_update_column', 'TR') is not null)
    drop trigger tgr_classes_update_column
go
create trigger tgr_classes_update_column
on manage
    for update
as
    --列级触发器:是否更新了班级创建时间
    if (update(m_name))
    begin
        raisError('系统提示:班级创建时间不能修改!', 16, 11);
        rollback tran;
    end

触发语句:

update manage set m_name='buyingfei' where m_id='1'





分享到:
评论

相关推荐

    达梦数据库_SQL语言手册

    语言集数据库的定义、査询、更新、控制、维护、恢复、安全等一系列操作于 体,每一项操作都只需一种操作符表示,格式规范,风格一致,简单方便,很容易为用户所掌 握 两种用户接口使用统一语法结构的语言 语言既是自...

    MySQL数据库入门到高级笔记快速学习pdf版本

    内容概要:这是博主自己写的三篇MySQL文章的综合pdf版本,干货满满,同时搭配脑图提高效率,从基础知识,比如对数据库的操作,对数据表的增删改,查单独写了一篇文章从单表到多表,子查询等等,干货满满,最后就是...

    SQL Server2005基础教程

    之后以前面建立的示例数据库为基础,深入讲解各种数据操作的方法,从数据检索、插入、更新、删除,到函数、触发器、存储过程的使用;最后,概略讲述了SQL Server Reporting Services。书中还针对数据安全性方面的...

    数据库设计超市会员管理系统.doc

    本系统利用视图、触发器,存储过程可以对数据库中的内容实现各种级联 修改与信息的实时更新,可以化繁为简,提高效率,避免大量的重复性的工作。 整个系统由会员信息管理模块、会员优惠度模块、购物信息模块和商品...

    数据库设计-超市会员管理系统.doc

    本系统利用视图、触发器,存储过程可以对数据库中的内容实现各 种级联修改与信息的实时更新,可以化繁为简,提高效率,避免大量的重复性的工作。 整个系统由会员信息管理模块、会员优惠度模块、购物信息模块和商品...

    informix 实用大全

    本书由专业Informix用户、数据库管理员、Informix管理员和应用程序开发员编写而成,把各大Informix产品的方方面面综合、深入地集中在一起,包括最新Informix产品的详细信息,如Informix Internet Foundation.2000...

    数据库设计-超市会员管理系统(2).doc

    本系统利用视图、触发器,存储过程可以对数据库中的内容实现各 种级联修改与信息的实时更新,可以化繁为简,提高效率,避免大量的重复性的工作。 整个系统由会员信息管理模块、会员优惠度模块、购物信息模块和商品...

    数据库设计-超市会员管理系统(1).doc

    本系统利用视图、触发器,存储过程可以对数据库中的内容实现各 种级联修改与信息的实时更新,可以化繁为简,提高效率,避免大量的重复性的工作。 整个系统由会员信息管理模块、会员优惠度模块、购物信息模块和商品...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

     是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作  全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。   本系列图书中文版得到了微软...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...

    黄淮学院2010学年第二学期SQL server期末考试

    __________是存储在文件中的一系列SQL语句,即一系列按顺序提交的批处理。 使用索引可以减少检索时间,根据索引的存储结构不同将其分为两类:_________和_________。 命令truncate table的功能是_______________。 ...

    oracle教案(doc)+SQL Reference 10g(chm).rar

    3.6 建表、约束、查询综合训练 95 3.6.1 题目背景: 96 3.6.2 功能要求: 96 3.6.3 建表 96 3.6.4 数据 97 3.6.5 要求 98 3.7 视图(重点) 98 3.7.1 创建视图的语法: 98 3.7.2 删除视图: 99 3.7.3 完整的视图创建...

Global site tag (gtag.js) - Google Analytics