2016-05-26 6 views
0

У меня есть таблица, которая содержитUPDATE/INSERT на основе уникальных ключей?

id | user | date | data1 | data2 ...... 

где id является основным уникальным ключом.

Я пытаюсь написать запрос, который может обновить, если оба user и date существовать в то время как INSERT, если ни одна из них не существует

Я думал о INSERT INTO ... дублированием KEY .. .UPDATE, но для этого требуется использовать уникальный ключ, который у меня есть, но не используется.

Что было бы хорошим способом справиться с этой проблемой?

+2

Вы пытались сделать '(пользователь, дата)' уникальным ключом? Это может привести к правильному запуску метода INSERT INTO ... ON DUPLICATE KEY UPDATE'. – cyberbit

+0

@cyberbit это на самом деле потрясающая идея! Я думаю, что я могу попытаться реализовать этот путь. – JChao

+0

Надеюсь, он работает. Дайте нам знать. ;) – cyberbit

ответ

2

За обсуждение в комментариях, вы должны сделать (user, date) уникальный ключ.

Это вызовет INSERT INTO ... ON DUPLICATE KEY UPDATE запрос, как и ожидалось, обновление строк с соответствующими user и date поля и вставить новые, где не найдено ни одного совпадения.

0

Единственным допустимым вариантом является реализация этого UPSERT на языке программирования, который вы используете с mysql, потому что MySQL нужен уникальный ключ для INSERT ... INTO и REPLACE.

Или добавить уникальный индекс на столбцах user и date, которые, похоже, в согласии с вашей бизнес-логикой в ​​любом случае.

Смежные вопросы