检查记录是否存在

时间:2015-08-27 06:35:44

标签: mysql insert

我有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 IGNOREREPLACE,但我需要一个唯一的密钥,并且所有字段都可能具有相同的值(就像它们可能有不同的house_no但相同的prv_codecty_code或类似的东西)。我只想在插入之前检查记录是否存在。

2 个答案:

答案 0 :(得分:1)

您可以在多个列上创建唯一键。在您的情况下,您需要一个包含四列house_nocity_codeprv_codecty_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

(重命名表名)