2013-12-05 5 views
1

У меня есть эта таблицаВСТАВИТЬ, если не существует Mysql

id  follow_id follower_id 
1 |  2  |  3 
2 |  2  |  4 
3 |  2  |  5 
4 |  2  |  6 
5 |  3  |  7 
6 |  3  |  8 

Я хотел бы, чтобы пропустить Если я пытаюсь вставить «пару» follow_id 2, 3 follower_id без делать подзапрос для выполнения

может Я делаю INSERT ... ON DUPLICATE KEY UPDATE или что-то в этом роде?

UPDATE, для симфони пользователя

после ответов. Я использую Symfony, и сделать

UNIQUE INDEX followee_and_follower (follow_id,follower); 

http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html#uniqueconstraint

ответ

4

Официальный синтаксис для этого

INSERT IGNORE ... 

Тем не менее, в вашем случае может быть предпочтительнее сделать

INSERT ... ON DUPLICATE KEY UPDATE id=id 

См. benchmarks. По моему опыту, этот хак только повышает производительность, если у вас есть первичный ключ - оптимизатор не распознает no-op, если вы делаете follower_id = follower_id.

4

Я считаю, что синтаксис вы хотите INSERT IGNORE.

От the manual:

Если вы используете ключевое слово IGNORE, ошибки, возникающие при выполнении оператора INSERT игнорируются. Например, без IGNORE строка, которая дублирует существующий индекс UNIQUE или значение PRIMARY KEY в таблице , вызывает ошибку с повторяющимся ключом и оператор прерывается. С номером IGNORE строка все еще не вставлена, но ошибки не возникает. Игнорируемые ошибки могут генерировать предупреждения вместо этого, хотя ошибки с дубликатными ключами делают нет.

Это требует уникального индекса (follow_id, follower_id), так что вам нужно будет добавить, что, если он уже не существует:

ALTER TABLE mytable 
    ADD UNIQUE INDEX followee_and_follower (follow_id,follower); 
+0

Я пытаюсь ввести INSERT IGNORE в mytable (follow_id, follower_id) VALUES (2,3), но добавьте строку с новым id и follow_id 2 follower_id 3 – Barno

+1

Вам нужен уникальный индекс (follow_id, follower_id). См. Мой обновленный ответ выше. –

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