触发在LOAD DATA INFILE期间跳过某些插入

时间:2010-05-25 16:02:06

标签: mysql triggers load-data-infile

首先是一个简化版本:我想知道我是否可以在INSERT期间创建一个激活触发器(它实际上是LOAD DATA INFILE)而不是在我的表中输入RMA的记录?

我有一张表没有唯一的记录。有些可能是合法的重复,但有一个字段可以用来知道数据是否已输入。例如

RMA     Op     Days
---------------------
213   Repair   0.10
213    Test    0.20
213   Repair   0.10

所以我可以在三个列上一起做一个索引,但正如你所看到的那样,RMA可以在相同的时间内进行两次步骤,因此可能有重复的记录。基本上,我希望触发器说明NEW.rma是否已经在表中,跳到下一行。

我发现有一些方法可以让Trigger停止插入,所以我想我现在的问题是,如何在LOAD DATA INFILE调用期间跳过插入并继续其余部分?

3 个答案:

答案 0 :(得分:1)

不需要使用锁表...这样做(我说的是表名是rmainfo):

create table rmainfo_new like rmainfo;
load data infile 'filename' into table rmainfo_new;
rename table rmainfo to rmainfo_old,rmainfo_new to rmainfo;
drop table rmainfo_old;

您也可以将删除表放在开头(使其成为DROP TABLE IF EXISTS rmainfo_old),这将在运行之间留下_old表以进行备份/引用

答案 1 :(得分:0)

你能设置一个从RMA和OP派生的复合密钥吗?这会导致重复的条目显示为错误。

答案 2 :(得分:0)

我能想到的最简单的方法是加载到新表中,然后删除旧表并重命名新表。 LOCK TABLES应该能够在最后隔离该开关。

或者,如果您确定行在插入文件中出现的顺序 - 即,如果确保文件具有旧行后跟新行 - 那么您可以COUNT(*)首先,然后在加载时跳过该行数。