mysql - 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;
解决方案
引用 P.Salmon:
没有重复的事件,简单的代码,没有触发器——我怀疑问题根本就在这里。
P.Salmon 就在这里,如果你能弄清楚其他工作在做什么,那就太好了。
但是,您也可以通过其他方式避免此问题。既然你不想重复,有一种方法可以检测重复,对吧?不管怎样,这 3 列的组合必须是唯一的,或者其他什么,然后在您的数据库中指出。
在使每一行唯一的列上创建唯一索引(或主键)。
然后,而不是简单的INSERT
你做INSERT IGNORE
,瞧,你将不再有重复。
引用手册:
如果使用 IGNORE 修饰符,则执行 INSERT 语句时发生的错误将被忽略。例如,如果没有 IGNORE,复制表中现有 UNIQUE 索引或 PRIMARY KEY 值的行会导致重复键错误并且语句被中止。使用 IGNORE,该行将被丢弃并且不会发生错误。忽略的错误可能会生成警告,尽管重复键错误不会。
推荐阅读
- vb.net - Range.Text 属性在从 Microsoft Word 中的表中检索值以在 VB.NET 中使用时给出奇怪的结果
- flutter - 列表中的数据在应用重启时消失?
- swift - 开始/结束外观转换的不平衡呼叫
- java - Spring Security 问题创建 bean
- c - 编译时分配的数据结构?
- javascript - 输入收音机改变不触发
- r - 如何一次取出每1500列中的第二个和第三个元素(如c(3,5),c(5,7))并通知一个矩阵
- python-3.x - 如何在 Mayavi 中为 3d 图的边缘着色?
- ios - Flutter webview navigationDelegate 调用了两次
- python - 我试图使这个数组中的偶数等于0,我做错了什么?