ในกรณีที่คุณต้องการเห็นความหมายของสิ่งทั้งหมดนี่คือการระเบิดของทุกสิ่ง:
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
คีย์หลักขึ้นอยู่กับทั้งสองคอลัมน์ของตารางอ้างอิงด่วนนี้ คีย์หลักต้องการค่าที่ไม่ซ้ำกัน
เอาล่ะ:
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
หมายเหตุงานพิเศษด้านบนที่บันทึกไว้มากเกินไปโดยการตั้งค่าคอลัมน์ให้เท่ากับตัวเองไม่จำเป็นต้องทำการอัปเดต
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
และตอนนี้มีการทดสอบหลายแถว:
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
ไม่มีข้อความอื่น ๆ ที่ถูกสร้างขึ้นในคอนโซลและตอนนี้มันมี 4 ค่าเหล่านั้นในข้อมูลตาราง ฉันลบทุกอย่างยกเว้น (1,1) ดังนั้นฉันสามารถทดสอบได้จากสนามเด็กเล่นเดียวกัน
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
ดังนั้นคุณมีมัน เนื่องจากทั้งหมดนี้ดำเนินการบนโต๊ะสดโดยแทบไม่มีข้อมูลและไม่ได้อยู่ในการผลิตเวลาในการดำเนินการจึงเป็นเรื่องเล็กและไม่เกี่ยวข้อง ทุกคนที่มีข้อมูลในโลกแห่งความเป็นจริงจะยินดีมากกว่าที่จะมีส่วนร่วม