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)
Вы должны убедиться, что необходимые поля объединены с 'и' и все заключены в скобки