2015-02-21 1 views
0

Я создаю мой стол, делая так:SQL создать новую строку со значениями, если строка с 2-х столбцов не соответствует

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 и ПУНКТУ другой записи.

Если мои объяснения не были ужасными, кто-нибудь знает, как это можно сделать?

+0

почему не может создать новый столбец, concats 'UUID' и 'пункт' и сделать этот новый столбец уникальным ?? –

+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

+0

Да, это выглядит отлично! Я постараюсь как можно скорее и пометить это как ответ, если он сработает! Можете ли вы объяснить, почему вы явно указываете InnoDB, это требование? –

+1

Это не требование. – Voidmain

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 
Смежные вопросы