Якщо ви хочете побачити, що все це означає, ось вам все це:
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
Так ось у вас це є. Оскільки це було виконано на свіжому столі, майже без даних, а не у виробництві, час виконання був мікроскопічним та неактуальним. Кожен, хто має дані в реальному світі, був би більш ніж бажаний внести їх.