2014-01-29 11 views
0

Я хотел бы обновить или вставить данные на основе двух столбцов.Вставка/обновление MySQL на основе двух столбцов

Каждый пользователь может иметь записи. Запись каждого пользователя должна быть уникальной для пользователя. Различные пользователи могут использовать идентификаторы записей.

Каждая запись будет содержать фрагмент текста.

id, user_id, entry_number, data 
1, 1, 1, "hello" 
2, 1, 2, "world" 
3, 1, 3, "fizz" 
4, 2, 1, "buzz" 
5, 2, 3, "fizzbuzz" 

Я хочу, чтобы иметь возможность вставлять/обновлять (в зависимости от того, существует ли) эти данные. Как мне это сделать? Заранее спасибо

+0

Вы можете проверить, если существует запись данных, которые вы хотите вставить, если он существует обновить еще вставить .. Некоторый код было бы слишком хорошо. – Naruto

ответ

1

Вы можете создать уникальный индекс по паре (user_id, entry_number), а затем использовать

INSERT ... ON DUPLICATE KEY UPDATE

Однако это ПО дубликата ключа может быть нестандартным расширением MySQL (пожалуйста проверить?). Если вы намерены использовать его в разных механизмах базы данных, вам может потребоваться сделать проверку вручную.

1

Использование REPLACE: «REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE index, старая строка удаляется до того, как новая строка будет вставить «. в http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE tbl_name (id, user_id, entry_number, data) VALUES (1, 1, 1, "something") 
+0

Есть ли способ сделать это без указания идентификатора? –

+1

Если вы не укажете идентификатор, он не соответствует существующему значению, поэтому он будет иметь нормальное поведение и будет действовать как INSERT и никогда не будет ОБНОВЛЕНИЕМ. Если вы действительно не хотите использовать идентификатор, вам нужно будет проверить наличие соответствия до этого, чтобы решить, нужен ли вам INSERT или UPDATE. – FabioG

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