欢迎莅临 SUN WU GANG 的园子!!!

世上无难事,只畏有心人。有心之人,即立志之坚午也,志坚则不畏事之不成。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  470 随笔 :: 0 文章 :: 22 评论 :: 30万 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

触发器:

触发器是与表有关的数据库对象,指在insert\update\delete之前或之后,触发并执行触发器中定义的SQL语句集合。

触发器的这种特性可以协助应用在数据库段确保数据的完整性,日志记录,数据校验等操作。

使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。

现在触发器还只支持行级触发,不支持语句级触发。

示例一:insert

注:new 表示新数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 插入数据触发器
drop trigger if EXISTS tb_users_insert_trigger;
create trigger tb_users_insert_trigger
    after insert on tb_users for each row
begin
    insert into tb_logs(id,operation,operation_time,operation_id,operation_params) VALUES
    (null,"insert",NOW(),new.id,CONCAT('插入的数据为:id=',new.id,',name=',new.name,',age=',new.age,',status=',new.status,",gender=",new.gender,",phone=",new.phone));
      
end;
 
-- 查看触发器
show TRIGGERS;
-- 触发或者说应用触发器
INSERT into tb_users(id,NAME,age,status,gender,phone)VALUES(null,'张三sss',18,'1','1','116');

示例二:update  

注:new 表示新数据,old表示原始老数据;当更改的数据行为多行数据时,触发器将会被触发多次(即,修改一行数据,触发一次)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- update 触发器
drop trigger if EXISTS tb_users_update_trigger;
create trigger tb_users_update_trigger
--  更新表之后触发
    after update on tb_users for each row
-- 更新表之前触发
--  before update on tb_users for each row
begin
    insert into tb_logs(id,operation,operation_time,operation_id,operation_params) VALUES
    (null,"update",NOW(),new.id,
     CONCAT('更新之前数据为:id=',old.id,',name=',old.name,',age=',old.age,',status=',old.status,",gender=",old.gender,",phone=",old.phone,
            '|更新之后数据为:id=',new.id,',name=',new.name,',age=',new.age,',status=',new.status,",gender=",new.gender,",phone=",new.phone));
 
end;
-- 查看触发器
show TRIGGERS;
update tb_users set name ='张三new' where name ='张三';

示例三:delete

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- delete 触发器
drop trigger if EXISTS tb_users_delete_trigger;
create trigger tb_users_delete_trigger
--  删除表之后触发
    after delete on tb_users for each row
begin
    insert into tb_logs(id,operation,operation_time,operation_id,operation_params) VALUES
    (null,"delete",NOW(),old.id,CONCAT('更新之前数据为:id=',old.id,',name=',old.name,',age=',old.age,',status=',old.status,",gender=",old.gender,",phone=",old.phone));
 
end;
-- 查看触发器
show TRIGGERS;
 
delete from tb_users where name ='张三sss';<br>delete from tb_users where name ='张三封';

 

posted on   sunwugang  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2017-07-25 C#发布程序添加其他程序文件
2016-07-25 winform实现word转换为PDF(.doc)
点击右上角即可分享
微信分享提示