MySQL之触发器_mysql触发器-程序员宅基地

技术标签: mysql  MySQL数据库  数据库  sql  

MySQL触发器

什么是触发器

  • MySQL触发器(Trigger)是一种特殊的存储过程,
  • 它与表有关,当表上的特定事件(insert,update,delete)发生时,触发器会自动执行。
  • 可以使用触发器来实现数据约束,数据验证,数据复制等功能

为什么使用触发器

  • 可以实现数据约束,数据验证,数据复制等功能
    • 例如:
      • 可以创建一个触发器,在向表中插入一条记录时,自动向另一个表中插入一个记录,从而实现数据复制的功能。
  • 触发器还可以用于实现数据验证,
    • 例如
      • 在插入或更新数据时,检查记录的某些字段是否符合要求,则拒绝插入或者更新,这样可以保证数据的完整性和一致性。

创建触发器

语法:

create trigger 触发器名称
{before | after } {
   insert | update | delete}  -- 触发器类型和事件
on 表名称
for each row  -- 触发器的作用范围
begin
    -- 触发器执行的操作
end;
  • 触发器名称可以自定义 ,并唯一性,见名知意
  • before / after : 表示触发器的类型,分别表示发生前/发生后执行
  • insert / update / delete : 表示触发器的事件类型,分别表示插入 / 更新 / 删除操作
  • on 表名称 : 为触发器所在的表名
  • for each row : 表示触发器作用的范围,即每一行记录都会触发该触发器
  • begin 和 end之间是触发器执行的操作,可以是一条或者多条SQL语句
  • 触发器是自动执行的,无需手动调用,
  • 当表上的特定事件(insert , update, delete ) 发生时,触发器会自动执行
  • 在创建触发器时,可以定义触发器的类型和事件,从而控制触发器的时机和条件

案例:

-- 创建两张表
create table table1(
    id int,
    name varchar(20) character set utf8
)charset = utf8;

create table table2(
    id int,
    name varchar(20) character set utf8
)charset = utf8;

添加事件

-- 创建一个触发器,当向表中插入一条记录时,自动向另一个表中插入一条记录
create trigger insert_trigger_1
after insert on table1
    for each row
    begin
        -- 触发器的具体事件
        insert into table2(id,name) values (NEW.id,New.name);
    end;

添加数据:

向table1表中添加数据时,会触发insert_trigger_1触发器,自动向table2表中添加数据

insert into table1(id,name) values (1,'张三'),(2,'李四'),(3,'王五'),(4,'赵六'),(5,'唐七'),(6,'老王');

查询table1表

select * from table1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7WwUqs3-1682412065268)(E:\Java笔记\数据库\MySQL触发器.assets\image-20230425163444783.png)]

查询table2表

select * from table2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8dDGXuG-1682412065269)(E:\Java笔记\数据库\MySQL触发器.assets\image-20230425163459492.png)]

删除事件

-- 创建一个触发器,当从表中删除一条记录时,自动从另一个表中删除一条记录
create trigger delete_trigger_1
 after delete on table1
    for each row
    begin
        delete from table2 where id = OLD.id and name = OLD.name;
    end;

删除数据:

删除table1表中数据时,会触发delete_trigger_1触发器,自动删除table2表中对应的数据

delete from table1 where id = 5 and name = '王五';

查看两张表中的数据

select * from table1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmMCyZU1-1682412065270)(E:\Java笔记\数据库\MySQL触发器.assets\image-20230425163700451.png)]

select * from table2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n8227mnW-1682412065270)(E:\Java笔记\数据库\MySQL触发器.assets\image-20230425163647831.png)]

修改事件

-- 创建一个触发器,当向表中更新一条记录时,自动更新另一个表中的记录
create trigger update_trigger_1
after update on table1
    for each row
    begin
        update table2 set id = NEW.id, name = NEW.name  where id = OLD.id and name = OLD.name;
    end;

修改数据:

修改table1表中数据时,会触发update_trigger_1触发器,自动更新table2表中对应的数据

update table1 set id = 10,name = '小明' where id = 6 and name = '老王';
select * from table1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Jfom32U-1682412065271)(E:\Java笔记\数据库\MySQL触发器.assets\image-20230425163852532.png)]

select * from table2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eN3drNe4-1682412065271)(E:\Java笔记\数据库\MySQL触发器.assets\image-20230425163907569.png)]

删除触发器

drop trigger 触发器名称;

触发器的应用场景

触发器的应用场景包括但不限于以下几种:

  1. 强制实施业务规则:通过在触发器中编写逻辑,可以在特定的表上自动执行业务规则,例如检查输入的数据是否符合要求,或者限制某些操作的执行。
  2. 记录日志变更:通过在触发器中编写逻辑,可以在特定的表上自动记录数据的变更情况,例如记录数据的修改时间、修改人等信息。
  3. 复杂的默认值计算:通过在触发器中编写逻辑,可以在特定的表上自动计算默认值,例如根据其他字段的值计算出一个新的字段的值。
  4. 数据同步:通过在触发器中编写逻辑,可以在多个表之间自动同步数据,例如在一个表中插入一条数据时,自动在另一个表中插入相应的数据。
  5. 数据校验:通过在触发器中编写逻辑,可以在特定的表上自动校验数据的正确性,例如检查数据的唯一性、完整性等。

总结:

触发器的应用场景非常广泛,可以用于强制实施业务规则、记录日志变更、复杂的默认值计算、数据同步以及数据校验等。在创建触发器时,需要指定触发器的名称、触发器所在的表、触发器的触发时机(如insert、update或delete操作)、触发器的执行次数(for each row或for each row statement)以及触发器的逻辑。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44715376/article/details/130368617

智能推荐

Python大数据之PySpark(四)SparkBase&Core-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏13次。executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。–executor-memory 默认1G,Memory per executor (e.g. 1000M, 2G) (Default: 1G) ,每个executour的内存。Yarn的回顾:Driver------AppMaster------RM-----NodeManager—Continer----Task。_pyspark

scrapy_当你准备启动一个项目时,可以从这个教程开始-程序员宅基地

文章浏览阅读446次。scrapyScrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。_当你准备启动一个项目时,可以从这个教程开始

树莓派中SIM7600G-H 4G DONGLE模块使用记录(二)使用花生壳服务器实现数据的远程传输_树莓派有sim卡模块吗-程序员宅基地

文章浏览阅读4.7k次,点赞11次,收藏18次。项目场景:在之前对树莓派进行PPP拨号上网/4G上网后,需要对树莓派中采集到的数据远程上传,并能接收云端软件下达的指令。然而在实现过程中,我们并不能够直接通过ITCP/IP通信实现数据的远程传输,还需要一个服务器作为中间桥梁,将云端主机的IP端口映射在全网上,这样树莓派才能通过映射后的IP地址与云端主机建立连接,实现数据的远程传输。花生壳花生壳是一款能够免费进行内网穿透与端口映射的服务器工具,可以在官网上直接搜索无需配置。支持多种通信格式,这里我们使用TCP通信类型。网络调试助手由于项目主体_树莓派有sim卡模块吗

先是IPV6,再是WI-FI7你都清楚这是什么吗?_ipv6和wifi6有什么区别-程序员宅基地

文章浏览阅读825次。先是IPV6,再是WI-FI7你都清楚这是什么吗?_ipv6和wifi6有什么区别

【SSM学习】6、Mybatis 动态sql语句实例详解_"<update id=\"updateworkstatebyid\"> update employ-程序员宅基地

文章浏览阅读1.9k次。首先我们给出一个Mapper配置文件,用于参照使用,下面给出详细介绍&amp;amp;amp;amp;amp;lt;?xml version=&amp;amp;amp;amp;quot;1.0&amp;amp;amp;amp;quot; encoding=&amp;amp;amp;amp;quot;UTF-8&amp;amp;amp;amp;quot; ?&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;l_" update employee set

Python爬虫神器pyppeteer-程序员宅基地

文章浏览阅读1.7w次,点赞18次,收藏119次。Puppeteer 是 Google 基于 Node.js 开发的工具,调用 Chrome 的 API,通过 JavaScript 代码来操纵 Chrome 完成一些操作,用于网络爬虫、Web 程序自动测试等。pyppeteer 是非官方 Python 版本的 Puppeteer 库。_pyppeteer

随便推点

CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯-程序员宅基地

文章浏览阅读2.5k次。《近匠》第64期,Wijmo 5是由GrapeCity旗下ComponentOne公司开发的新一代HTML5/JavaScript控件库。本期近匠采访了Wijmo 5 CTO Bernardo Castilho先生,听他讲述从Web到移动的25年编程生涯,以及Wijmo 5的开发故事。

几行代码轻松实现,Tensorlayer 2.0推出深度强化学习基准库_tensorlayer 2.0+-程序员宅基地

文章浏览阅读494次。2019-11-11 16:37:04机器之心发布机器之心编辑部强化学习通过使用奖励函数对智能体的策略进行优化,深度强化学习则将深度神经网络应用于强化学习算法。深度强化学习由于其可扩展性,受到科研界和工业界越来越多的关注,其应用包括简单的基于图像的游戏,和高度复杂的游戏如星际争霸,以及棋牌类游戏如围棋、德州扑克等,在机器人控制领域也逐渐被科研人员采用。近日,为了让工业界能更好地..._tensorlayer 2.0+

vivado中各个文件的含义_vivado 文件集-程序员宅基地

文章浏览阅读5.6k次,点赞4次,收藏31次。大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。今天给大侠带来了Xilinx vivado中各个文件的含义,话不多说,上货。在Xilinx ISE中不同的操作都有不同的文件类型对应,例如综合、布局、布线、生成比特流等都会产生特定格式的文件,在vivado中也是一样,只不过在vivado中,文件的格式相比于ISE中更加统一。1,.dcp文件,在ise中每个过程都会产生特定格式.._vivado 文件集

中科大计算机与技术学院报录比,报录比49:1!院校专业对比!盘点那些堪称“卷中之王”的专业!...-程序员宅基地

文章浏览阅读1.6k次。原标题:报录比49:1!院校专业对比!盘点那些堪称“卷中之王”的专业!院校报录比更新这两天好多院校都开始陆续公布20年报录比相关数据,真是不看不知道,一看吓一跳,1615人报名,录取33人,报录比50:1,堪称内卷王中王,小黑看到只想大喊一声“快逃!”。今天我们就来盘点一下近两年内卷到飞起的专业和院校,给大家排排雷! 新传新传的“卷”已经和学校没有什么关系了,是的,我不针对哪个学校,我说的是所有学..._中科大计算机考研学硕 报录比

0x000000ea(0x000000ea蓝屏代码是什么意思)-程序员宅基地

文章浏览阅读2.1k次。蓝屏错误代码0X000000EA(0X85AFDDA0,OX89?0x000000EA错误表示显示驱动程序遇到了问题。这个错误一般是因为显卡或显示器的驱动程序存在BUG或安装不正确引起的。 如果遇到0x000000EA错误,建议在Windows中重新安装显卡及显示器驱动程序,看看问题能否解决;如果故障依旧,请使用“替换..._0x000000ea

【Office】解决Excel关闭Personal工作簿导致宏不见的情况_个人宏工作簿不见了-程序员宅基地

文章浏览阅读1w次。问题:Excel想要编辑或者删除宏,都要先取消隐藏这个PERSONAL的工作簿今天取消隐藏之后,顺手就关掉了,然后就发现自己保存的宏不见了解决:找出文件PERSONAL.XLSB并重新打开即可解决过程:在网上找了一番,大概是因为我把宏保存到个人工作簿中(就是PERSONAL.XLSB)然后,实际上,我们打开Excel的时候也会同时在隐藏中打开PERSONAL.XLSB和..._个人宏工作簿不见了

推荐文章

热门文章

相关标签