次のsqlfiddleを見てください。 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) ;
連絡先の基本的な表があります。 network_id
およびnetwork_contact_id
フィールドには、他のテーブルにリンクするID番号が含まれています。
このテーブルに対してINSERT IGNORE
クエリを実行できるようにしたいのですが、network_id
とnetwork_contact_id
の組み合わせを、照合する一意のキーとして使用したいと思います。
たとえば、network_id = 4
とnetwork_contact_id = 12
が含まれる連絡先を挿入しようとすると、INSERT IGNORE
クエリはそのエントリがすでに存在することを確認し、スローされたエラーを無視します。
したがって、基本的に、network_id
は一意ではありません。 network_contact_id
は一意ではありません。しかし、この2つの組み合わせは独特です。これをどのように設定しますか?他の2つのフィールドを連結した値である他の1つのフィールドが必要ですか?または、このテーブルのキーを設定して、必要なことを行う方法はありますか?
試しましたか
CREATE TABLE contacts (
id int auto_increment primary key,
name varchar(20),
network_id int,
network_contact_id int,
UNIQUE KEY (`network_id`, `network_contact_id`)
);
2つの列の組み合わせにUNIQUE KEY
制約を追加して、テーブルの定義を変更します。
CREATE TABLE contacts
(
id int auto_increment primary key,
name varchar(20),
network_id int,
network_contact_id int,
CONSTRAINT network_id_contact_id_UNIQUE
UNIQUE KEY (network_id, network_contact_id)
);
INSERT IGNORE
、REPLACE
とINSERT ... ON DUPLICATE KEY UPDATE
の違いについて、Bill Karwinによるこの回答も確認してください。