首先是一个简化版本:我想知道我是否可以在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调用期间跳过插入并继续其余部分?
答案 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(*)
首先,然后在加载时跳过该行数。