数据库原理与应用 第 16 章 · 上机四
课程第 16 章上机四 先看调度器打开它AT:只跑一次EVERY时刻已经过去框一个窗连续练习 版式
第 16 章 触发器和事件 · 上机四

调度器、AT 与 EVERY

课件第 34 到 48 页:先开调度器,再把 AT 和 EVERY 两种写法各跑一遍。
已完成 0 / 6
本 次 上 机 题 目
  1. 01事件的总开关
  2. 02SET GLOBAL event_scheduler = ON
  3. 03例题 2:十秒后插一行
  4. 04例题 4:每五秒插一行
  5. 05Note 1588:不报错,但它没了
  6. 06STARTS 和 ENDS 把周期框起来
  7. 重名与一次自己动手
01
第 16 章 · 上机四

事件的总开关

调度器没开,事件建得上也不会跑。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往表上挂触发器、往库里放事件。
mysql>

重 点

回显是 Query OK 加 1 warning,可 tb_one 并没有建出来。

知道更多

MySQL 8.0 装完调度器默认是 ON,这台终端故意从 OFF 起步,让你亲手打开它。

想一想

回显是 Query OK,为什么表没建出来?

02
第 16 章 · 上机四

SET GLOBAL event_scheduler = ON

调度器一转,刚才排着队的事件立刻跑掉。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往表上挂触发器、往库里放事件。
mysql>

重 点

tb_one 出现了。事件的时刻早过了,调度器一开它马上补跑。

知道更多

SET GLOBAL 只管这一次开机,要一直开着得写进 my.ini 再重启。

想一想

为什么不能写 SET event_scheduler = ON?

03
第 16 章 · 上机四

例题 2:十秒后插一行

AT 定的是一个时刻,到了跑一次,然后它自己就没了。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往表上挂触发器、往库里放事件。
mysql>

重 点

tno 那一列写的是 0,出来却是 1,自增列上写 0 等于让服务器接着发号。

知道更多

SELECT SLEEP(12) 是真机上就有的语句,回显那个 0 也是真机给的。

想一想

再 SLEEP 一次,还会多一行吗?

04
第 16 章 · 上机四

例题 4:每五秒插一行

EVERY 定的是间隔,跑完一次接着排下一次。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往表上挂触发器、往库里放事件。
mysql>

重 点

十六秒里跑了三遍,时间戳相差正好五秒。

知道更多

AT 跑完自己就没了,EVERY 跑完接着排下一次,这是两者的分水岭。

想一想

不删它的话,它会一直跑到什么时候?

05
第 16 章 · 上机四

Note 1588:不报错,但它没了

一次性事件的时刻要是已经过去,建完当场就被删掉。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往表上挂触发器、往库里放事件。
mysql>

重 点

回显是 Query OK 加一条 Note,SHOW EVENTS 里根本找不到 ev_past。

知道更多

想让它留下来就加 ON COMPLETION PRESERVE,留下来的状态是 DISABLED。

知道更多

加上 ON COMPLETION PRESERVE 它才留得下来,留下来的状态是 DISABLED。

想一想

这一条为什么比会报错的更容易出事?

06
第 16 章 · 上机四

STARTS 和 ENDS 把周期框起来

例题 5 那种写法:从某时起,只跑一段时间。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往表上挂触发器、往库里放事件。
mysql>

重 点

前十秒不跑,三十秒后收工,中间只跑那几遍。

知道更多

STARTS 把起跑线往后挪,ENDS 到了就收工,事件自己删掉。

想一想

最后 SHOW EVENTS 里为什么看不见 ev_win 了?

第 16 章 · 上机四

重名与一次自己动手

撞一次 1537,再照着需求建一个每小时跑的事件。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往表上挂触发器、往库里放事件。
mysql>

重 点

触发器重名报 1359,事件重名报 1537,两个号码别记混。

知道更多

两小时里 ev_dup 跑 360 遍,ev_hour 跑 2 遍,12 加 362 正好是 374。

想一想

把 STARTS 那一行去掉,第一次执行会提前多久?

保山学院·人工智能教研室·曹鼎鼎