Lihatlah sqlfiddle berikut: http://sqlfiddle.com/#!2/dacb5/1
CREATE TABLE contacts
(
id int auto_increment primary key,
name varchar(20),
network_id int,
network_contact_id int
);
INSERT INTO contacts
(name, network_id, network_contact_id)
VALUES
('John', 4, 10),
('Alex', 4, 11),
('Bob', 4, 12),
('Jeff', 4, 45),
('Bill', 7, 11),
('Walter', 7, 45),
('Jessie', 7, 360) ;
Saya memiliki tabel dasar kontak. Bidang network_id
dan network_contact_id
berisi nomor id yang menautkan ke tabel lain.
Saya ingin dapat menjalankan INSERT IGNORE
kueri ke tabel ini, tapi saya ingin menggunakan kombinasi network_id
dan network_contact_id
sebagai kunci unik untuk mencocokkan.
Jadi misalnya, jika saya mencoba menyisipkan kontak yang memiliki network_id = 4
dan network_contact_id = 12
, INSERT IGNORE
kueri akan melihat entri itu sudah ada, dan mengabaikan kesalahan yang terjadi.
Jadi pada dasarnya, network_id
itu tidak unik. network_contact_id
tidak unik. Namun kombinasi keduanya unik. Bagaimana cara mengatur ini? Apakah saya harus memiliki satu bidang lain yang merupakan nilai gabungan dari dua bidang lainnya? Atau ada cara untuk mengatur kunci untuk tabel ini sehingga akan melakukan apa yang saya butuhkan?
sumber
id
bidang sebagai kunci utama jikaunique key
hal ini sekarang disetel?Ubah definisi tabel dengan menambahkan
UNIQUE KEY
batasan pada kombinasi dari dua kolom:Anda juga harus memeriksa jawaban ini oleh Bill Karwin tentang perbedaan antara
INSERT IGNORE
,REPLACE
danINSERT ... ON DUPLICATE KEY UPDATE
sumber