创建定时器:
create event myevent on schedule every 30 second
starts current_timestamp
do
update manager set b_hostState=0 where now()-interval 80 second> d_lastUpdate;创建触发器:
delimiter |
create trigger manager_bu before update on manager for each row
begin
set new.d_lastUpdate=now(); end;|
delimiter ;
显然定时器的update对update触发器产生了影响,但是影响很严重:有的记录是0,但有的记录就是1,不变0了,怎么回事?
create event myevent on schedule every 30 second
starts current_timestamp
do
update manager set b_hostState=0 where now()-interval 80 second> d_lastUpdate;创建触发器:
delimiter |
create trigger manager_bu before update on manager for each row
begin
set new.d_lastUpdate=now(); end;|
delimiter ;
显然定时器的update对update触发器产生了影响,但是影响很严重:有的记录是0,但有的记录就是1,不变0了,怎么回事?
解决方案 »
- 用cmake将MySQL5.0.54源代码生成工程文件?
- 请问MySQL中有没有跟MSSQL类似的STUFF()函数?
- 求教mysql cluster的备份策略
- 关于 mysql if 嵌套sql问题
- OTL通过MyODBC连接mysql需要用什么库
- 为什么删除索引,重新建立一次同样的索引,速度快很多呢?
- 如何取出用数据库存贮的文件?
- 这个查询方案怎么写? 请高手指点啊。
- 求知识,MYSQL多表联调获取200条数据显示在页面,SQL如何优化?
- 跪求navicat for mysql 11.1.13注册码
- 连接mysql数据库时出现Table 'djteddy.logoname' doesn't exist
- 我对MySQL的C API觉得莫名奇妙的的一点,关于MYSQL_ROW
看看其实你上面的操作可以不用触发器,直接在update语句里面一步到位了:
create event myevent on schedule every 30 second
starts current_timestamp
do
update manager set b_hostState=0,d_lastUpdate=now() where now()-interval 80 second> d_lastUpdate;
我查询了select * from manager(触发器所在的表),可以显示的,没有问题
按照你上面的写法,对于一条记录的更改都不起作用了.......
数据字典至于你的问题,建议你能提供相关的测试方法,也就是如果在其它机器上再现你的问题。
比如你的 create table / create event / create trigger
还有你的 insert , update 语句。这样其它人可以进行测试。
最终代码修改为创建定时器:
create event myevent on schedule every 10 second
starts current_timestamp
do
update manager set b_hostState=0 where b_hostState=1 and now()-interval 70 second> d_updateTime;创建触发器:
delimiter |
create trigger manager_bu before update on manager for each row
begin
set new.d_updateTime=now();
end;|
delimiter ;
问题解决了,但还有一个疑问:从测试结果来从update 到set b_hostState=0的时间正好相差10second的整数倍,这是没什么呢?每条记录的update时间是不一样的,检测的时间都是固定的周期,难道event 对每条记录单独起作用?为什么会相差很好解释,为什么都是10second的整数倍呢?求解~~~~~