MySQL INSERT如果其中一个主键值不匹配

时间:2011-03-24 09:13:00

标签: mysql insert unique-key not-exists

我想像这样做MySQL查询:


if((value1 != dbPrimaryValue1) OR (value2 != dbPrimaryValue2))
      INSERT ROW
else
      DO NOTHING

让我们试试例子:


CREATE TABLE `tmp` (
    `one` int NOT NULL,
    `two` int NOT NULL,
    `three` int NOT NULL);

ALTER TABLE `tmp`
ADD PRIMARY KEY (`one`, `two`);

INSERT INTO `tmp`
    (`one`, `two`, `three`)
    VALUES (1,2,3);

INSERT INTO `tmp`
    (`one`,`two`,`three`) 
    VALUES (10,20,30),
           (1,999,999),
       (999,2,999),
       (1,2,999)
    ON DUPLICATE KEY 
           UPDATE `one` = `one`; // or some dummy no-source-drain operation

结果在这里:


select * from tmp;
+-----+-----+-------+
| one | two | three |
+-----+-----+-------+
|   1 |   2 |     3 |
|  10 |  20 |    30 |
|   1 | 999 |   999 |
| 999 |   2 |   999 |
+-----+-----+-------+

你想得到这样的结果:


 select * from tmp;
+-----+-----+-------+
| one | two | three |
+-----+-----+-------+
|   1 |   2 |     3 |
|  10 |  20 |    30 |
+-----+-----+-------+

是否可以进行此查询?我正在使用大量数据和程序,如 load - >比较 - >保存是不可能的。谢谢!

2 个答案:

答案 0 :(得分:1)

只需将两个字段分开制作即可。例如:

CREATE TABLE `tmp` (
    `one` int NOT NULL UNIQUE,
    `two` int NOT NULL UNIQUE,
    `three` int NOT NULL);

或者通过以下方式添加约束:

ALTER TABLE `tmp` ADD UNIQUE (`one`);
ALTER TABLE `tmp` ADD UNIQUE (`two`);

答案 1 :(得分:0)

如果您创建了UNIQUE键约束,则数据库将不允许您自动插入它们。

来自MySQL forum

  

UNIQUE索引创建约束   这样索引中的所有值都必须   与众不同。如果你发生错误   尝试添加具有键值的新行   与现有行匹配。对全部   引擎,UNIQUE索引允许   列的多个NULL值   可以包含NULL。