INSERT INTO .. ​​ON DUPLICATE KEY UPDATE с несколькими ключами

У меня есть эта таблица со следующими столбцами:

id
userid
app
field
value

Столбцы "поле" и "приложение" уникальны вместе с "идентификатором пользователя". Таким образом, у пользователя всегда будет только 1 строка, имеющая одинаковые значения "app" и "field" вместе. Но они будут иметь более одной строки, у которой будет одинаковое значение "app" или только значение "field". И всегда будет несколько строк с одинаковым "идентификатором пользователя".

Я не уверен, как я могу сделать и вставить или обновить несколько ключей. Я не могу установить их как уникальные в MySQL, так как это значение может быть использовано для других строк "userid" или других строк, которые имеют другое значение "app" или "field".

Возможно ли это, или я должен сначала сделать SELECT, чтобы проверить, существует ли строка, где "userid", "app" и "field" соответствуют тому, что я хочу вставить или обновить.

Кроме того, я пытаюсь вставить / обновить более 1 строки с помощью одного запроса.

3 ответа

Решение

Это то, что сработало для меня...

INSERT INTO table (field, app, userid, value)
           VALUES (1,1,1,1),(2,2,2,2),(3,3,3,3),(4,4,4,4)
           ON DUPLICATE KEY UPDATE value=VALUES(value);

это работает, делая несколько строк одним запросом

Сначала создайте уникальный индекс на (user_id, app, field),

ALTER TABLE user_settings
ADD UNIQUE (userid,app,field);

затем используйте запрос как этот.

INSERT INTO user_settings SET
       -- id = ?,   Do not include this -- you don't have the value
       userid = ?,
        app=?,
        field=?,
        value = ?,
        ON DUPLICATE KEY UPDATE
        value = ?;

Вы можете сделать это

update mytable set col1 = @value where (field = @v and app=@v1)

если вы хотите три поля, то:

 update mytable set col1 = @value where (field = @v and app=@v1 and userid = @v2)

Вы должны убедиться, что необходимые поля объединены с 'и' и все заключены в скобки

Другие вопросы по тегам