Nel caso in cui si vuole vedere che cosa questo tutti i mezzi, ecco un blow-by-blow di tutto:
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
chiave primaria si basa su entrambe le colonne di questa tabella di riferimento rapido. Una chiave primaria richiede valori univoci.
Cominciamo:
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
nota, il sopra salvato troppo lavoro extra impostando la colonna uguale a se stesso, nessun aggiornamento effettivamente necessario
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
e ora alcune prove multiple righe:
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
nessun altro messaggio è stato generato in console e ora ha quei 4 valori in i dati della tabella. Ho cancellato tutto eccetto (1,1) in modo da poter testare dallo stesso campo di gioco
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
Così ce l'hai. Dato che questo era tutto eseguito su un tavolo nuovo con quasi nessun dato e non in produzione, i tempi per l'esecuzione erano microscopici e irrilevanti. Chiunque disponga di dati del mondo reale sarebbe più che benvenuto a contribuire.
Bello vado sugli effetti collaterali! Grazie. Non mi dispiace che le righe duplicate non vengano inserite. Questo è in realtà ciò che voglio. Che altro viene ignorato da INSERT IGNORE? –
insert ignore credo ignora gli errori – IEnumerator
Trasforma gli errori in avvisi. Ho aggiunto alcuni dettagli sopra, per i casi di errori che vengono ignorati quando si utilizza INSERISCI IGNORA. Potrebbero esserci anche altri casi. –