0

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

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

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

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

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

4

3 回答 3

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 放在开头(make it DROP TABLE IF EXISTS rmainfo_old),这将在运行之间留下 _old 表以供备份/参考

于 2011-01-04T18:19:08.023 回答
0

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

于 2010-05-25T16:35:18.017 回答
0

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

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

于 2010-07-22T09:32:43.887 回答