Как мне вставить несколько значений в MySQL и избежать дубликатов - PullRequest
3 голосов
/ 13 мая 2011

Как мне вставить несколько строк или значений и избежать дубликатов в следующей схеме.

схема таблицы

id,subject1,subject2,subject3

идентификатор автоматически увеличивается.
Дубликат будет в том случае, когда все subject1, subject2, subject3 уже существуют в записи в том же порядке.

INSERT INTO "table_name" ("subject1","subject2","subject3")  
VALUES ("cats", "dogs", "hamsters")  
VALUES ("squirrels", "badgers", "minxes")  
VALUES ("moose", "deer", "ocelots") 

В таблице, скажем, у меня уже есть запись для

id,subject1,subject2,subject3
1,"cats", "dogs", "hamsters"

так что я хочу просто вставить

VALUES ("squirrels", "badgers", "minxes")  
VALUES ("moose", "deer", "ocelots")

Я видел ответы о том, как избежать дубликатов для отдельных элементов, но не для 3.

Ответы [ 3 ]

2 голосов
/ 13 мая 2011

Вы хотите добавить ограничение UNIQUE к вашей таблице. Если вы напишите ограничение UNIQUE отдельно, станет понятнее, как применять его к произвольным комбинациям столбцов.

CREATE TABLE table_name (
    subject1 VARCHAR(30),
    subject2 VARCHAR(30),
    subject3 VARCHAR(30),
    UNIQUE (subject1, subject2, subject3)
);
1 голос
/ 13 мая 2011

Вам нужно обойтись уникальным ключом в трех столбцах.

Пример определения таблицы

CREATE TABLE `table_name` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK',
  `subject1` varchar(64) NOT NULL,
  `subject2` varchar(64) NOT NULL,
  `subject3` varchar(64) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `subjects` (`subject1`,`subject1`, `subject3`)
) ENGINE=InnoDB
0 голосов
/ 13 мая 2011

Чтобы добавить ограничение сейчас:

ALTER TABLE {tablename}
ADD CONSTRAINT {constraintname} UNIQUE (subject1, subject2, subject3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...