Mysql 如果主键值之一不存在';不匹配

Mysql 如果主键值之一不存在';不匹配,mysql,insert,unique-key,not-exists,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 PR

我想这样做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 |
+-----+-----+-------+

可以进行此查询吗?我正在处理大量数据,无法执行加载->比较->保存等操作。谢谢

只需分别使两个字段唯一即可。例如:

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`);

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

发件人:

唯一索引创建约束 这样,索引中的所有值都必须 要清楚。如果您 尝试添加具有键值的新行 与现有行匹配的。总的来说 引擎,一个唯一的索引允许 包含多个空值的列 可以包含NULL

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