Jeśli chcesz zobaczyć, co to wszystko znaczy, oto cios wszystkiego po wszystkim:
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
Klucz podstawowy opiera się na obu kolumnach tej tabeli szybkich odniesień. Klucz podstawowy wymaga unikalnych wartości.
Zaczynajmy:
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
Uwaga: powyższe zaoszczędziło zbyt wiele dodatkowej pracy, ustawiając kolumnę na taką samą, nie wymagając żadnej aktualizacji
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
a teraz niektóre testy wielu wierszy:
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
żadne inne komunikaty nie zostały wygenerowane w konsoli, a teraz ma te 4 wartości w danych tabeli. Usunąłem wszystko oprócz (1,1), aby móc testować z tego samego pola gry
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
Więc masz to. Ponieważ wszystko to zostało wykonane na świeżym stole bez prawie żadnych danych i nie w produkcji, czasy wykonania były mikroskopijne i nieistotne. Każdy, kto ma rzeczywiste dane, chętnie je włączy.