立刻执行:建一张表
AT now() 就是现在,调度器一看到它就跑。

AT now() 就是现在,调度器一看到它就跑。

表是事件建的,不是你建的。

AT 后面写当前时刻加一个间隔,就是往后推。

CURRENT_TIMESTAMP + INTERVAL 10 SECOND 算出来是一个具体时刻。
tno 那一列写的是 0,自增列上写 0 等于让服务器接着发号。
tno 是 1 不是 0,时间是事件跑起来那一刻。

自增列上写 0 或 NULL,MySQL 都当成「你来发号」,接着上一个往下排。
再等十秒,还会不会又多一行?
AT 后面直接写一个日期时间字符串。

写死的时刻要是已经过去了,事件建完当场就被删掉。
只跑一次就用 AT,EVERY 是周期性的,加了 ENDS 也还是要跑好几遍。
| 回显 | SHOW EVENTS 查得到吗 |
|---|
两行的时间正好差着两次执行的间隔。

一次性事件跑完就自己没了,SHOW EVENTS 里再也找不到它。
ON COMPLETION PRESERVE 能把它留下来,留下来的状态是 DISABLED。
一次性事件像一张用完就作废的票,留着也只是个存根。
想让它跑完还留着,该加哪个子句?
EVERY 后面写间隔,跑完接着排下一次。

时间戳相邻两行正好差五秒。

不删它就一直跑下去,写 EVERY 之前先想清楚它什么时候停。
线上误建一个每秒跑的事件,一天就能灌进八万多行。
怎么让它跑一周就自动停?
STARTS 定起跑线,ENDS 定收工时刻。

ENDS 到了事件自己删掉,不用你再去 DROP 一次。
CURRENT_DATE + INTERVAL 1 WEEK 算的是一周后的零点,不是此刻加一周。
学号、平均分、总分、插入时间四列。

avgscore 定成 INT,平均分的小数存进去会被四舍五入掉。
第 14 章讲过这一条:类型定窄了不报错,精度悄悄就没了。
拿一把只认整数的尺子去量,量出来当然是整数。
89.25 存进 INT 会变成多少?
一句 INSERT…SELECT 把每个人的平均分总分算出来。

课件这一段有 BEGIN…END 却没写 DELIMITER,照抄进 mysql> 必报 1064。
同一份课件第 13 页建触发器时是写了 DELIMITER 的,这里漏了。
事件体里一句 CALL,活儿是过程干的。

事件负责定时,过程负责干活,两样各管一头。
这一段同样漏了 DELIMITER,跟上一页是同一个毛病。
为什么不把那句 INSERT 直接写进事件里?
每个学生一行,平均分是整数。

一条 INSERT 一次插进七行,七行的时间戳是同一个值。
MySQL 把小数四舍五入成整数再存,不报错,精度就这么悄悄丢了。
想留住小数,这一列该定成什么类型?