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