触发器简单小结

本文详细介绍了SQL Server触发器的基本概念,包括Instead of与After两种类型的区别,以及Inserted和Deleted表的作用。通过一个具体实例展示了如何创建触发器来同步更新轮胎库存记录。

首先介绍触发器的两个最重要的基础知识:

1、 触发器分为两种:Instead of After 触发器。After触发器,顾名思义,就是在你SQL语句(Insert,Delete,Update)执行之后进行的操作。Instead of 则是在SQL语句之前,而且并不执行SQL语句。

2、 SQL Server为每一个触发器都准备了两个表:Inserted表和Deleted表,当执行Insert操作的时候,Inserted存入了要插入的数据,结构和要插入的数据表结构相同。Delete也是相同的。它们是在内存中,只能读取,不能修改,触发器结束,表也会删除。

一、 触发器基本语句

1、 创建触发器

 create trigger trigger_name

  on {table_name | view_name}

  {for | After | Instead of }

  [ insert, update,delete ]

    as

  sql_statement

2、 删除触发器:

drop trigger trigger_name

3、 查看数据库中已有触发器:

select * from sysobjects where xtype='TR'

4、 修改触发器:

alter trigger trigger_name

on {table_name | view_name}

{for | After | Instead of }

 [ insert, update,delete ]

as

sql_statement

二、 可能大家感觉上面的语句大家在书上都能看到,对自己没有太大帮助还是不会写,给大家一个实例,大家就会豁然开朗,知道上面的语句都是什么意思。

下面这个实例作用是当我们向轮胎出入库记录表插入数据的时候,同时将轮胎的数据从仓库表中添加和删除。 

create trigger TYRE_IN_OUT_INSERT

on TYRE_OUT_IN //轮胎出入库表

after insert

as

declare @TYRE_EPC varchar(50), @STORAGE varchar(50), @symbol varchar(50);    

--inserted表中查询已经插入记录信息    

select @TYRE_EPC = TYRE_EPC, @STORAGE = STORAGE, @symbol = SYMBOL from inserted;

if ( @symbol='入库')

begin  

insert into TYRE_STORAGE  values(@TYRE_EPC, @STORAGE);    

end

if(@symbol='出库')

begin

if(exists (select TYRE_EPC from TYRE_ STORAGE  where TYRE_EPC=@TYRE_EPC))

begin

delete from TYRE_ STORAGE  where TYRE_EPC=@TYRE_EPC;

end

end

print '出入库成功!';

### 触发器和锁存器的概念及其与有限状态机的关系 #### 1. 触发器和锁存器的基本概念 触发器(Flip-Flop)和锁存器(Latch)均属于时序逻辑电路的基础组件,主要用于存储一位二进制信息。然而,两者在工作方式上有显著差异。 ##### (1)锁存器(Latch) 锁存器是一种异步工作的时序元件,其输出取决于使能信号的状态而非时钟边沿。具体而言,当使能信号有效时,锁存器会将输入数据传递至输出并保存该值直至使能信号失效[^1]。例如,一个简单的D型锁存器会在使能信号为高电平时,立即将输入端的数据复制到输出端[^4]。 ##### (2)触发器(Flip-Flop) 触发器则是一种同步工作的时序元件,仅在其指定的时钟边沿到来时更新输出状态。这意味着即使输入发生变化,只要未到达设定的时钟边沿,触发器的输出不会受到影响[^3]。典型的D型触发器会在正向时钟边沿(posedge clk)捕获输入数据,并将其存储下来[^2]。 --- #### 2. 触发器和锁存器的主要区别 | 特性 | 锁存器(Latch) | 触发器(Flip-Flop) | |-------------------|------------------------------------|-----------------------------------| | **工作模式** | 异步 | 同步 | | **敏感信号** | 对使能信号的变化立即响应 | 只对时钟边沿敏感 | | **应用场景** | 数据保持、快速响应场景 | 复杂时序控制、状态机实现 | --- #### 3. 触发器和锁存器在有限状态机中的应用 有限状态机(Finite State Machine, FSM)是数字系统设计中常用的建模工具之一,用于描述系统的动态行为。在硬件实现层面,触发器通常是构建有限状态机的核心部件。 ##### (1)基于触发器的有限状态机 由于触发器具有严格的时钟驱动特性,因此非常适合用来实现同步有限状态机。在这种架构下,整个系统的状态转换严格遵循全局时钟信号,从而提高了系统的稳定性与时序可控性[^2]。例如,在Verilog中可以通过如下代码片段定义一个基于D触发器的状态寄存器: ```verilog always @(posedge clk or posedge reset) begin if (reset) state <= STATE_IDLE; else state <= next_state; end ``` 此处,`state`变量代表当前状态,而`next_state`则是根据输入条件计算得出的新状态。每当正向时钟边沿到来时,状态寄存器便会依据新值完成更新操作[^2]。 ##### (2)基于锁存器的设计局限性 尽管锁存器能够提供更灵活的时间窗口以适应某些特殊需求,但由于缺乏统一的时钟约束,容易引发毛刺效应等问题,故较少单独运用于复杂有限状态机之中。不过,在涉及跨时钟域数据传输或其他低延迟场合时,仍可见到它的身影。 --- #### 4. 小结 综上所述,虽然锁存器和触发器同属基本存储单元,但在实际工程实践中各有侧重——前者因其实现简便且反应迅速而在局部优化方面占据一定地位;后者凭借稳健可靠的性能成为搭建大规模同步数字系统不可或缺的一环,尤其是在有限状态机领域更是如此。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值