SQL创建具有值的新行,除非具有2列的行匹配

时间:2015-02-21 02:15:05

标签: mysql sql

我通过这样做来创建我的表:

CREATE TABLE IF NOT EXISTS table_name (uuid VARCHAR(128), item VARCHAR(48), value FLOAT(11))

当我插入值时,我希望UUID和ITEM一起使用。我的意思是,如果有一个条目,其中uuid和item匹配新值,它将更新那个值。如果没有,它将创建一个新的。因此,我不希望UUID拥有一个unqiue密钥,也不希望ITEM。但我有点希望它们在一起变得独一无二。因此,UUID和ITEM都不能与其他条目的UUID和ITEM匹配。

如果我的解释不是很糟糕,有谁知道如何做到这一点?

2 个答案:

答案 0 :(得分:3)

这是你要找的吗?首先制作uuid并设置主键。

CREATE TABLE IF NOT EXISTS table_name (uuid VARCHAR(128), item VARCHAR(48), value FLOAT(11), PRIMARY KEY(uuid, item)) ENGINE InnoDB;

然后使用“ON DUPLICATE UPDATE”

INSERT INTO table_name(UUID, item, value)
VALUES ('315c383c-b977-11e4-a6d1-954287e1d27a',  'item1', 1.0)
ON DUPLICATE KEY UPDATE value = VALUES(value);

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html Insert into a MySQL table or update if exists

答案 1 :(得分:0)

尝试这样的事情。

仅在新行组合时插入行

INSERT INTO table_name
SELECT uuid,
       item,
       value
FROM   source_table S
WHERE  NOT EXISTS (SELECT 1
                   FROM   table_name T
                   WHERE  S.uuid = T.uuid
                          AND s.item = t.item)

如果组合已存在,则更新行

UPDATE table_name T
       JOIN source_table S
         ON S.uuid = T.uuid
            AND s.item = t.item
SET    T.value = S.value