我有CSV文件,在将数据插入表格之前我需要做类似的事情:
table fields
id = primary id and auto-increment
house_no
city_code
prv_code
cty_code
if (house_no,city_code,prv_code,cty_code) exists = ignore insert
else if (house_no,city_code,prv_code,cty_code) is null = ignore insert
else (house_no,city_code,prv_code,cty_code) !exist = insert
我的原始代码只是重新插入相同的值,因为主键 id 只是为它创建一个新ID,因此我有重复项。
我需要这样做以避免重复。我尝试了INSERT IGNORE
和REPLACE
,但我需要一个唯一的密钥,并且所有字段都可能具有相同的值(就像它们可能有不同的house_no
但相同的prv_code
或cty_code
或类似的东西)。我只想在插入之前检查记录是否存在。
答案 0 :(得分:1)
您可以在多个列上创建唯一键。在您的情况下,您需要一个包含四列house_no
,city_code
,prv_code
和cty_code
的唯一键。
在你的情况下:
ALTER TABLE fields
ADD CONSTRAINT uc_fieldsUnique UNIQUE (house_no,city_code,prv_code, cty_code);
答案 1 :(得分:0)
将CSV文件中的数据加载到第二个表中,然后像这样使用INSERT添加行 -
INSERT INTO t1(id, house_no, city_code, prv_code, cty_code)
SELECT NULL, t2.house_no, t2.city_code, t2.prv_code, t2.cty_code FROM t2
LEFT JOIN t1 ON t1.house_no = t2.house_no AND t1.city_code = t2.city_code AND t1.prv_code = t2.prv_code AND t1.cty_code = t2.cty_code
WHERE t1.id IS NULL
(重命名表名)