Trong trường hợp bạn muốn xem tất cả điều này có nghĩa là gì, thì đây là một cú đánh của tất cả mọi thứ:
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
Khóa chính dựa trên cả hai cột của bảng tham chiếu nhanh này. Khóa chính yêu cầu các giá trị duy nhất.
Hãy bắt đầu nào:
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
lưu ý, ở trên đã lưu quá nhiều công việc phụ bằng cách đặt cột bằng chính nó, không thực sự cần cập nhật
REPLACE INTO users_partners (uid,pid) VALUES (1,1)
...2 row(s) affected
và bây giờ một số bài kiểm tra nhiều hàng:
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
không có thông báo nào khác được tạo trong bảng điều khiển và hiện có 4 giá trị đó trong dữ liệu bảng. Tôi đã xóa mọi thứ trừ (1,1) để tôi có thể kiểm tra từ cùng một sân chơi
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
Vì vậy, có bạn có nó. Vì tất cả điều này được thực hiện trên một bảng mới với gần như không có dữ liệu và không được sản xuất, nên thời gian thực hiện là rất nhỏ và không liên quan. Bất cứ ai có dữ liệu trong thế giới thực đều được chào đón để đóng góp.