Jika Anda ingin melihat apa arti semua ini, berikut adalah pukulan dari segalanya:
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
Kunci primer didasarkan pada kedua kolom dari tabel referensi cepat ini. Kunci primer memerlukan nilai unik.
Mari kita mulai:
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
perhatikan, di atas menyimpan terlalu banyak pekerjaan tambahan dengan mengatur kolom sama dengan dirinya sendiri, tidak ada pembaruan yang benar-benar diperlukan
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
dan sekarang beberapa tes baris:
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
tidak ada pesan lain yang dihasilkan di konsol, dan sekarang ada 4 nilai di tabel data. Saya menghapus semuanya kecuali (1,1) sehingga saya bisa menguji dari lapangan bermain yang sama
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
Jadi begitulah. Karena ini semua dilakukan di atas meja baru dengan hampir tidak ada data dan tidak dalam produksi, waktu pelaksanaannya adalah mikroskopis dan tidak relevan. Siapa pun dengan data dunia nyata akan lebih dari senang untuk berkontribusi.