如果不存在则插入 - 按所有列查找

时间:2016-05-12 03:14:37

标签: mysql

我想插入没有重复的新行。

完整的想法是仅在不存在缩进的时才插入新行,不仅仅是一个键,这意味着两个列必须一起存在才能将其称为重复。

 parent_id | report_date
 1         | 2015-12-15
 1         | 2015-10-10
(1         | 2015-10-10) NOT ALLOWED  
 2         | 2011-05-04

1 个答案:

答案 0 :(得分:1)

方法1:添加唯一索引

ALTER TABLE `tablename` ADD UNIQUE `unique_index`(`parent_id`, `report_date`);

现在,如果您尝试更新,查询执行将失败。

方法2:插入时检查

最佳解决方案是在评论中添加@pyNoob建议的唯一索引。但是如果你不能这样做,可能因为索引而担心磁盘空间?,那么下面的查询就可以了: -

INSERT INTO tablename (parent_id, report_date)
SELECT * FROM (SELECT '1', '2015-10-10') AS tmp
WHERE NOT EXISTS (
    SELECT parent_id, report_date FROM tablename where parent_id = '1' and report_date = '2015-10-10'
) LIMIT 1;