Wenn Sie sehen möchten, was dies alles bedeutet, finden Sie hier einen Überblick über alles:
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
Der Primärschlüssel basiert auf beiden Spalten dieser Kurzreferenztabelle. Ein Primärschlüssel erfordert eindeutige Werte.
Lass uns anfangen:
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
Beachten Sie, dass durch das oben Gesagte zu viel zusätzliche Arbeit gespart wurde, indem die Spalte auf sich selbst gesetzt wurde. Es ist kein Update erforderlich
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
und jetzt einige mehrzeilige Tests:
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
In der Konsole wurden keine anderen Nachrichten generiert, und diese 4 Werte sind jetzt in den Tabellendaten enthalten. Ich habe alles außer (1,1) gelöscht, damit ich vom selben Spielfeld aus testen konnte
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
Da haben Sie es also. Da dies alles an einem frischen Tisch ohne Daten und ohne Produktion durchgeführt wurde, waren die Ausführungszeiten mikroskopisch und irrelevant. Jeder mit realen Daten wäre herzlich eingeladen, diese beizutragen.