首页 > 解决方案 > MySQL 事件调度程序

问题描述

我设置了 1 个 mysql 事件,0每 12 小时将所有带有标志的数据从一个表传输到另一个表(表 2),然后1在传输后更新查询以设置为标志。INSERT并且UPDATE在一个事件过程中。

我的问题是,所有传输的数据在表 2 上都有重复,看起来 2 事件正在运行。

任何想法?

这是我的事件代码:

分隔符 |
创造
    事件
    如果不存在
    event_transfer
    每 12 小时安排一次
    开始'2018-08-10 06:00:00'
    完成后不保留
    使能够

DO BEGIN INSERT INTO dbsample.tblmirror (Column1, Column2, Column3) (SELECT Column1, Column2, Column3 FROM tblmaster WHERE is_transfer = 0); UPDATE dbsample.tblmaster SET is_transfer = 1 WHERE is_transfer = 0; END | DELIMITER;

标签: mysqlmysql-event

解决方案


引用 P.Salmon:

没有重复的事件,简单的代码,没有触发器——我怀疑问题根本就在这里。

P.Salmon 就在这里,如果你能弄清楚其他工作在做什么,那就太好了。
但是,您也可以通过其他方式避免此问题。既然你不想重复,有一种方法可以检测重复,对吧?不管怎样,这 3 列的组合必须是唯一的,或者其他什么,然后在您的数据库中指出。

在使每一行唯一的列上创建唯一索引(或主键)。

然后,而不是简单的INSERT你做INSERT IGNORE,瞧,你将不再有重复。

引用手册

如果使用 IGNORE 修饰符,则执行 INSERT 语句时发生的错误将被忽略。例如,如果没有 IGNORE,复制表中现有 UNIQUE 索引或 PRIMARY KEY 值的行会导致重复键错误并且语句被中止。使用 IGNORE,该行将被丢弃并且不会发生错误。忽略的错误可能会生成警告,尽管重复键错误不会。


推荐阅读