SQL:触发器DELETE触发器的工作过程

当触发DELETE触发器后,从受影响的表中删除的行将被放置到一个特殊的deleted表中。deleted表是一个逻辑表,它保留已被删除数据行的一个副本。deleted表还允许引用由初始化DELETE语句产生的日志数据。

使用DELETE触发器时,需要考虑以下的事项和原则:

l 当某行被添加到deleted表中时,它就不再存在于数据库表中;因此,deleted表和数据库表没有相同的行。

l 创建deleted表时,空间是从内存中分配的。deleted表总是被存储在高速缓存中。

l 为DELETE动作定义的触发器并不执行TRUNCATE TABLE语句,原因在于日志不记录TRUNCATE TABLE语句。

示例

在本例中,将创建一个触发器,无论何时删除一个产品类别(即从Categories表中删除一条记录),该触发器都会更新Products表中的Discontinued列。所有受影响的产品都标记为1,标示不再使用这些产品了。

USE Northwind

CREATE TRIGGER Category_Delete

       ON Categories

       FOR DELETE

AS

       UPDATE P SET Discontinued = 1

              FROM Products AS P INNER JOIN deleted AS d

              ON P.CategoryID = d.CategoryID
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
触发器是一种特殊的存储过程,它与特定表相关联,当该表上的特定事件发生时,触发器会自动执行。通过使用触发器,可以实现诸如自动化数据更改、复杂的数据验证和计算等功能。 在 SQL 中,创建触发器需要使用 CREATE TRIGGER 语句。语法如下: ```sql CREATE TRIGGER trigger_name {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON table_name [FOR EACH ROW] BEGIN -- 触发器的执行逻辑 END; ``` 其中,trigger_name 是触发器的名称,INSERT、UPDATE、DELETE 分别表示触发器要针对的表上的插入、更新和删除操作。BEFORE 和 AFTER 分别表示在操作之前和之后执行触发器。FOR EACH ROW 表示在每行数据发生变化时都会执行触发器。 下面是一个简单的例子,创建一个触发器,当 customers 表中有新行插入时,自动向 orders 表中插入一条记录: ```sql CREATE TRIGGER new_order AFTER INSERT ON customers FOR EACH ROW BEGIN INSERT INTO orders (customer_id, order_date) VALUES (NEW.customer_id, NOW()); END; ``` 这个触发器会在每次向 customers 表中插入一行数据时,自动向 orders 表中插入一条记录,其中 customer_id 是插入的新行的 customer_id 值,order_date 是当前时间。注意,NEW 是一个变量,它代表插入的新行数据。 触发器是一个强大的工具,可以实现很多自动化的功能。但是,过度使用触发器可能会导致性能问题,因此需要慎重使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值