第 16 章 · 第五节
换讲事件
同样是存进库里的一段代码,叫醒它的换成了时间。

重 点
触发器盯着某一张表,事件谁也不盯,只盯钟。
打个比方
触发器是门口的感应灯,事件是墙上的定时开关。
知道更多
教材把这一半放在 16.2,考试里两半各占一道题的分量。
同样是存进库里的一段代码,叫醒它的换成了时间。

触发器盯着某一张表,事件谁也不盯,只盯钟。
触发器是门口的感应灯,事件是墙上的定时开关。
教材把这一半放在 16.2,考试里两半各占一道题的分量。
比触发器多一件,也多一条 ALTER。

| 改得了吗 | |
|---|---|
| 触发器 | 不行,只能重建 |
| 事件 | 行,ALTER EVENT |
为什么事件能改,触发器不能?
一个概念,一个开关。

事件本身只是一条记录,真正让它跑起来的是调度器那根线程。
开关这一件最容易漏,漏了后面全白做。
调度器关掉之后,已经建好的事件还在吗?
定时删记录、定时汇总、定时清表都靠它。

触发器响应表上的操作,事件响应时间间隔,区别只在这一句。
「每天凌晨两点备份」该用哪一个?
事件调度器是一根专门盯着钟的线程。

没开调度器时建事件,回显里会多一句 warning 提醒你。
课件说默认开着,那是 MySQL 8.0 的默认值,5.7 和 MariaDB 默认是关的。
语法一套,例子六个。

六个例子从最简单的立刻执行,一路排到调用存储过程。
事件建在哪个库里,跑的时候就在哪个库里,跨库要写全名。
关键在 SCHEDULE 那一段,别的都是配料。

CREATE EVENT 后面必写的只有名字、ON SCHEDULE 和 DO 三样。
少写 DO 那一段会怎么样?
中间四行都可以不写,写了才有额外效果。

DO 后面要跑好几句就用 BEGIN…END 包起来,那时又得改定界符。
IF NOT EXISTS 放在哪一句后面才合法?
另外两个子句把循环框在一段时间里。

| 子句 | 管什么 |
|---|---|
| AT | 某一刻跑一次 |
| EVERY | 每隔多久跑 |
| STARTS | 从什么时候起 |
| ENDS | 到什么时候止 |
| 第一次什么时候跑 | 什么时候收工 |
|---|