事件为什么会改变不相干字段的值?

吉普赛的歌 2018-01-15 10:12:36
#增加测试表及测试数据
create table if not exists a(
id int primary key,
c datetime not null,
d int not null
);
truncate table a;
insert into a(id,c,d) values(1,'2018-01-15 06:00:00',0);
insert into a(id,c,d) values(2,'2018-01-15 10:00:00',0);
#关闭再开启事件
#SET GLOBAL event_scheduler = OFF;
SET GLOBAL event_scheduler = ON;
show variables like '%event_scheduler%';
#创建事件 禁用->删除->创建
#alter event `eventTest` disable; #如果有先禁用避免没有生效
drop event if exists `eventTest`;
CREATE EVENT `eventTest`
ON SCHEDULE
EVERY '2' second #测试成功后可改成 Hour
DO update a set d=d+1 where TIMESTAMPDIFF(Hour, c, '2018-01-15 10:00')>2;


然后再查询:
mysql> select * from a;
+----+---------------------+---+
| id | c | d |
+----+---------------------+---+
| 1 | 2018-01-15 10:09:23 | 1 |
| 2 | 2018-01-15 10:00:00 | 0 |
+----+---------------------+---+
2 rows in set (0.02 sec)


会什么事件中更新, 会改成不相干字段的值呢?
MySQL bug? 当前版本:
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.14-log |
+------------+
1 row in set (0.02 sec)


...全文
263 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-01-15
  • 打赏
  • 举报
回复
引用 5 楼 zjcxc 的回复:
怀疑你建表的时候用的 timestamp, 或者是设置了 ON UPDATE 的默认值
timestamp 本意是时间戳, 是我无知了, 多谢。给分结贴!
吉普赛的歌 2018-01-15
  • 打赏
  • 举报
回复
引用 5 楼 zjcxc 的回复:
怀疑你建表的时候用的 timestamp, 或者是设置了 ON UPDATE 的默认值
最开始确实用的是 timestamp , 后来老是出现事件更新为当前时间, 于是改了代码, 但由于是 create table if not exits , 表结构实际上还是原来的…… 不明白 MySQL 为什么要帮我在 timestamp 类型字段上加一个默认值? 这不就是帮倒忙吗?
#创建表的代码是:
CREATE TABLE `a` (
  `id` int(11) NOT NULL,
  `c` timestamp NOT NULL,
  `d` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ;

# show create table a 显示出来是:
CREATE TABLE `a` (
  `id` int(11) NOT NULL,
  `c` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `d` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
zjcxc 2018-01-15
  • 打赏
  • 举报
回复
怀疑你建表的时候用的 timestamp, 或者是设置了 ON UPDATE 的默认值
zjcxc 2018-01-15
  • 打赏
  • 举报
回复
表结构不是你给出的吧? show create table a 看下
吉普赛的歌 2018-01-15
  • 打赏
  • 举报
回复
@zjcxc--个人微信公共号同名 呼叫邹老大
rucypli 2018-01-15
  • 打赏
  • 举报
回复
好奇怪 打开binlog看看执行了什么
吉普赛的歌 2018-01-15
  • 打赏
  • 举报
回复
按道理, 只可能更新 id=1 的记录的 d 字段的值, 但为什么 id=1 的 c 字段的值莫明其妙地更新为当前时间了???

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧