我想像这样做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 - >比较 - >保存是不可能的。谢谢!
答案 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。