Взгляните на следующее 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
поля содержат идентификационные номера , которые ссылаются на другие таблицы.
Я хочу иметь возможность выполнять INSERT IGNORE
запросы к этой таблице, но я хочу использовать комбинацию network_id
и network_contact_id
как уникальный ключ для сопоставления.
Так, например, если я попытаюсь вставить контакт, который имел network_id = 4
и network_contact_id = 12
, INSERT IGNORE
запрос увидит, что запись уже существует, и проигнорирует любую выданную ошибку.
Так что в принципе network_id
не уникален. network_contact_id
не уникален. Но комбинация двух уникальна. Как мне это настроить? Должен ли я иметь одно другое поле, представляющее собой объединенные значения двух других полей? Или есть способ настроить ключи для этой таблицы, чтобы она делала то, что мне нужно?
источник
id
поле в качестве первичного ключа, если этаunique key
вещь установлена?Измените определение таблицы, добавив
UNIQUE KEY
ограничение на комбинацию двух столбцов:Вы должны также проверить этот ответ Билла Karwin о различиях между
INSERT IGNORE
,REPLACE
иINSERT ... ON DUPLICATE KEY UPDATE
источник