В случае, если вы хотите увидеть, что это все средства, вот это удар за ударом всего:
CREATE TABLE `users_partners` (
`uid` int(11) NOT NULL DEFAULT '0',
`pid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`,`pid`),
KEY `partner_user` (`pid`,`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
Первичный ключ основан на оба колонках этой краткой справочной таблицы. Основной ключ требует уникальных значений.
Давайте начнем:
INSERT INTO users_partners (uid,pid) VALUES (1,1);
...1 row(s) affected
INSERT INTO users_partners (uid,pid) VALUES (1,1);
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'
INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1);
...0 row(s) affected
INSERT INTO users_partners (uid,pid) VALUES (1,1) ON DUPLICATE KEY UPDATE uid=uid
...0 row(s) affected
примечания, выше сохранено слишком много дополнительной работы, установив столбец равного себе, никакого обновления на самом деле не требуется
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
и теперь некоторые несколько тестов строк:
INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...Error Code : 1062
...Duplicate entry '1-1' for key 'PRIMARY'
INSERT IGNORE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...3 row(s) affected
В консоли не было создано никаких сообщений, и теперь эти 4 значения в данные таблицы. Я удалил все, кроме (1,1), чтобы я мог протестировать с одного и того же игрового поля
INSERT INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4) ON DUPLICATE KEY UPDATE uid=uid
...3 row(s) affected
REPLACE INTO users_partners (uid,pid) VALUES (1,1),(1,2),(1,3),(1,4)
...5 row(s) affected
Итак, у вас оно есть. Так как все это было сделано на свежем столе с почти отсутствием данных, а не на производстве, времена для выполнения были микроскопическими и неактуальными. Любой, кто имеет данные в реальном мире, будет более чем рад внести свой вклад.
Ницца справляется с побочными эффектами! Благодарю. Я не возражаю, что дублированные строки не будут вставлены. Это то, что я хочу. Что еще игнорирует INSERT IGNORE, хотя? –
insert ignore i believe игнорирует ошибки – IEnumerator
Он превращает ошибки в предупреждения. Я добавил некоторые подробности выше, для случаев ошибок, которые игнорируются при использовании INSERT IGNORE. Могут быть и другие случаи. –