※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!)
【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!
https://www.bilibili.com/video/BV1UE41147KC/?spm_id_from=333.1007.0.0&vd_source=b287f1f4a1fa54cc438e31a0f87ef4e2
第九章:触发器
1、TIGGERS——触发器
触发器:在插入、更新和删除语句前后自动执行的一堆SQL代码,使用触发器增强数据的一致性
CREATE TRIGGER payments_after_insert:触发器关联到付款表,并会在插入一条记录后点燃
payments_after_insert:多数为触发器命名时使用的格式
payments明确表名
after触发器在SQL语句之前还是触发
insert插入语句,引爆触发器的SQL语句类型(仅为名字,无实质影响)

NEW:会返回刚插入的行;OLD:更新或删除行
NEW.:一个点,可以获取单独属性

确认payments有amount列
每次往列里插入新纪录,通过NEW.amount就可以获取新的payment_total

触发器中我们可以修改任何表中的数据,除了触发器所在表(payments),否则会变成无限轮回,因为这个触发器能自燃
基于payments触发,不能继续在此表插入触发器

原来数据:



练习:


删掉payment表中的payment_id = 9

Invoices表也随之改变


2、VIEWING TRIGGERS——查看触发器
SHOW TRIGGERS:查看当前数据库的所有触发器

如果只想看有关payments表的触发器
![]()
3、DROPPING TRIGGERS——删除触发器
可选并建议加上:IF EXISTS
![]()
最好把删除与创建语句放到同一个脚本文件,并录入一个源代码库中
如此不仅团队的每个人都可以创建同样的数据库,还可以看到历史数据库修改记录

4、USING TRIGGERS FOR AUDITING——使用触发器进行审计
触发器用途:为了之后审计的目的而记录对数据库的修改(相当于查看修改日志)
①打开payments_audit并执行



②插入记录

③创建好后触发器后执行,得到插入数据的时间记录


④再创建一个触发器,更新付款信息后启动
先删除以上数据
client_id在payments表中的payment_id是10


payments表删除同时payments_audit新增记录
(删掉了,但是我的记录没有新增……留着这个坑......)
以上的审计表是简化了,实际应用中,或许需要为多张表记录变更。这种情况不建议为数据库中的每张表分别创建审计表,太重复劳动
可以建立一个总架构来记录变更
5、EVENTS——事件
事件:根据计划执行的任务或一堆SQL代码,可以执行一次或者按规律执行(每天/每周)
自动化数据库维护任务:删除已经过期的数据、把数据从一张表复制到存档表、汇总数据生成报告
查看、编辑事件:
①打开MySQL事件调度器(后台程序,每时每刻都在寻找需要执行的事件)
可以看到MySQL所有的系统变量

②只查找事件管理器变量

③event_scheduler:时间调度器且默认设置为开启
如果想关掉
![]()
建立一个事件
①首先修改默认分隔符并命名事件
以事件执行时间间隔大头命名
便于容易找到每月、每年或单次触发的事件
![]()
②设定执行时间
单次AT,规律性EVERY,也可以加上限定时间
![]()
③在主体部分写下执行内容

也可以使用DATEADD、DATESUB这两种方式

完整代码:

6、VIESING AND DROPPING EVENTS——查看和更改事件
①查看事件:

以时间命名便于查找
![]()
②删除事件
![]()
ALTER EVENT:修改事件,而不用删除再重建
语法和CREATE EVENT语句完全一样
可直接修改执行时间和主体

也可以用来暂时启用或者禁用一个事件
————TBC



















