事件的总开关
调度器没开,事件建得上也不会跑。
重 点
回显是 Query OK 加 1 warning,可 tb_one 并没有建出来。
知道更多
MySQL 8.0 装完调度器默认是 ON,这台终端故意从 OFF 起步,让你亲手打开它。
想一想
回显是 Query OK,为什么表没建出来?
调度器没开,事件建得上也不会跑。
回显是 Query OK 加 1 warning,可 tb_one 并没有建出来。
MySQL 8.0 装完调度器默认是 ON,这台终端故意从 OFF 起步,让你亲手打开它。
回显是 Query OK,为什么表没建出来?
调度器一转,刚才排着队的事件立刻跑掉。
tb_one 出现了。事件的时刻早过了,调度器一开它马上补跑。
SET GLOBAL 只管这一次开机,要一直开着得写进 my.ini 再重启。
为什么不能写 SET event_scheduler = ON?
AT 定的是一个时刻,到了跑一次,然后它自己就没了。
tno 那一列写的是 0,出来却是 1,自增列上写 0 等于让服务器接着发号。
SELECT SLEEP(12) 是真机上就有的语句,回显那个 0 也是真机给的。
再 SLEEP 一次,还会多一行吗?
EVERY 定的是间隔,跑完一次接着排下一次。
十六秒里跑了三遍,时间戳相差正好五秒。
AT 跑完自己就没了,EVERY 跑完接着排下一次,这是两者的分水岭。
不删它的话,它会一直跑到什么时候?
一次性事件的时刻要是已经过去,建完当场就被删掉。
回显是 Query OK 加一条 Note,SHOW EVENTS 里根本找不到 ev_past。
想让它留下来就加 ON COMPLETION PRESERVE,留下来的状态是 DISABLED。
加上 ON COMPLETION PRESERVE 它才留得下来,留下来的状态是 DISABLED。
这一条为什么比会报错的更容易出事?
例题 5 那种写法:从某时起,只跑一段时间。
前十秒不跑,三十秒后收工,中间只跑那几遍。
STARTS 把起跑线往后挪,ENDS 到了就收工,事件自己删掉。
最后 SHOW EVENTS 里为什么看不见 ev_win 了?
撞一次 1537,再照着需求建一个每小时跑的事件。
触发器重名报 1359,事件重名报 1537,两个号码别记混。
两小时里 ev_dup 跑 360 遍,ev_hour 跑 2 遍,12 加 362 正好是 374。
把 STARTS 那一行去掉,第一次执行会提前多久?