※食用指南:文章内容为‘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