数据表触发器

1.概念
  • 触发器就是在表数据发生变化的时候,自动触发的一些 SQL 操作,查询不影响表中的数据,所以没有触发器。
  • 类似于web监听器机制,监听对应表的增删改。
2.触发器分类
触发器类型OLD 触发器之前的效果NEW 触发器之后的效果
INSERT 类型的触发器无(因为插入前,没有之前的数据)NEW 表示将要或者已经新增的数据
UPDATE 类型的触发器OLD 表示修改之前的数据NEW 表示将要或者已经修改后的数据
DELETE 类型的触发器OLD 表示将要或者已经修改的数据无(因为删除后,状态无数据)
3.触发器创立语法
DELIMITER $ --定义临时语句结束符号

CREATE TRIGGER  触发器的名称  

-- BEFORE|AFTER表示在操作之前还是操作之后执行日志记录
BEFORE|AFTER INSERT|UPDATE|DELETE ON 需要监测的表名称  FOR EACH ROW 
BEGIN
	触发器要执行的功能;
END$

DELIMITER ;
4.各种类型的触发器应用举例

账户表account
在这里插入图片描述
日日志表account_log
在这里插入图片描述
<1>INSERT 触发器
创建INSERT型触发器。用于对account表新增数据进行日志的记录

DELIMITER $

CREATE TRIGGER account_insert 
AFTER INSERT ON account FOR EACH ROW
BEGIN
	INSERT INTO account_log VALUES(NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}'));
END$
DELIMITER ;
-- 向account表添加一条记录
INSERT INTO account VALUES(NULL,'张益达',2000);
-- 查询account_log表
SELECT * FROM account_log;

account_log查询结果:
在这里插入图片描述

<2>UPDATE 触发器
创建UPDATE型触发器。用于对account表修改数据进行日志的记录

DELIMITER $
CREATE TRIGGER account_update
AFTER UPDATE ON account FOR EACH ROW
BEGIN 
	INSERT INTO account_log VALUES(NULL,'UPDATE',NOW(),new.id,
	CONCAT('更新前{id=',old.id,',name=',old.name,',money=',old.money,'}','更新后{id=',new.id,',name=',new.name,',money=',new.money,'}'));
END$
DELIMITER ;
-- 修改account表中李四的金额为2000
UPDATE account SET money=2000 WHERE id IN(1,2);
-- 查询account表
SELECT * FROM account;
-- 查询account_log表
SELECT * FROM account_log;

account_log查询结果:
在这里插入图片描述

<3>DELETE 触发器
创建DELETE型触发器。用于对account表删除数据进行日志的记录

DELIMITER $
CREATE TRIGGER account_delete
BEFORE DELETE ON account FOR EACH ROW -- 使用before和after都可以
BEGIN
	INSERT INTO account_log VALUES(NULL,'DELETE',NOW(),old.id,CONCAT('删除前{id=',old.id,',name=',old.name,',money=',old.money,'}'));
END$
DELIMITER ;
-- 删除account表中id=3的记录
DELETE FROM account WHERE id=3;
-- 查询account表
SELECT * FROM account;
-- 查询account_log表
SELECT * FROM account_log;

account_log查询结果:
在这里插入图片描述

5.查看/删除本数据库中触发器
  • 1.查看触发器
SHOW  TRIGGERS;

在这里插入图片描述

  • 2.删除触发器
DROP  TRIGGER  触发器的名称;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL Server触发器是一种特殊类型的存储过程,它会在指定的上发生特定事件时自动执行。当上发生更新操作时,可以通过触发器来更新数据。 触发器通常与INSERT、UPDATE和DELETE语句一起使用。当这些语句被执行时,触发器会自动调用并执行相关的操作。 在创建触发器时,需要指定触发器要绑定到的以及要触发的事件类型(INSERT、UPDATE、DELETE)。然后,可以编写触发器的主体部分,该部分包含在触发器被调用时要执行的SQL语句。 当触发器绑定的上发生与触发器事件类型匹配的操作时,触发器会自动执行。在执行过程中,可以使用内置的Inserted和Deleted来引用被修改的数据。Inserted包含插入或更新操作所添加或修改的行,而Deleted包含删除或更新操作所删除或修改的行。 通过在触发器的主体部分编写更新操作的SQL语句,可以实现对数据的更新。这些更新可以是根据触发器事件导致的数据更改,也可以是根据其他或计算逻辑生成的数据。 使用触发器更新数据的好处是,在数据变更时自动执行相关操作,而无需手动干预。这可以保证数据的一致性和完整性,并减少人为错误的可能性。 需要注意的是,使用触发器更新数据时,应谨慎操作,避免造成循环触发和性能问题。同时,触发器的相关操作应经过充分的测试和验证,确保其正常运行并达到预期的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陪雨岁岁年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值