mysql事件调度器

tcbh2hod  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(328)

我设置了1个mysql事件,用它传输所有数据 0 每12小时将一个表标记到另一个表(表2),然后更新查询以设置为 1 转移后的旗帜。 INSERT 以及 UPDATE 在一个事件进程上。
我的问题是,所有传输的数据在表2上都有重复,看起来像2事件正在运行。
你知道吗?
以下是我的事件代码:

DELIMITER |
CREATE
    EVENT
    IF NOT EXISTS
    event_transfer
    ON SCHEDULE EVERY 12 HOUR
    STARTS '2018-08-10 06:00:00'
    ON COMPLETION NOT PRESERVE
    ENABLE 

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;
cbeh67ev

cbeh67ev1#

引用p.salmon:
没有重复的事件,简单的代码,没有触发器-我怀疑问题就在这里。
p、 鲑鱼就在这里,如果你知道,还有什么工作在做这件事,那就好了。
但是,你也可以用另一种方法来避免这个问题。既然你不想有重复的东西,有一种方法可以检测重复的东西,对吧?不管怎样,这3列的组合必须是唯一的,然后在数据库中指明。
在使每行唯一的列上创建唯一索引(或主键)。
然后,不是简单的 INSERT 你知道吗 INSERT IGNORE ,瞧à, 你不会再有重复的了。
引用手册:
如果使用ignore修饰符,则会忽略执行insert语句时发生的错误。例如,在不忽略的情况下,复制表中现有唯一索引或主键值的行将导致重复键错误,并且语句将中止。使用ignore时,将丢弃该行,并且不会发生错误。忽略的错误可能会生成警告,尽管重复的键错误不会。

相关问题