Tüm bunların ne anlama geldiğini görmek istiyorsanız, işte her şeyin bir darbesi:
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
Birincil anahtar, bu hızlı başvuru tablosunun her iki sütununu temel alır. Birincil anahtar benzersiz değerler gerektirir.
Hadi başlayalım:
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
not, yukarıdaki sütun kendini eşit ayarlayarak çok fazla ekstra iş kaydetti, aslında hiçbir güncelleme gerekli
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
ve şimdi bazı çok sıralı testler:
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
konsolda başka ileti oluşturulmadı ve artık tablo verilerinde bu 4 değere sahip. (1,1) hariç her şeyi sildim, böylece aynı oyun alanından test yapabilirim
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
İşte burada. Bunların hepsi üretimde olmayan ve neredeyse hiç veri içermeyen yeni bir masa üzerinde gerçekleştirildiğinden, uygulama süreleri mikroskopik ve alakasızdı. Gerçek dünya verilerine sahip olan herkes buna katkıda bulunmaktan memnuniyet duyar.