2011-05-13 132 views
3

如何插入多行或值並避免重複出現在以下模式中。如何在mysql中插入多個值並避免重複

表架構是

id,subject1,subject2,subject3 

ID是自動遞增。
重複將是所有主題1,主題2,主題3已經以完全相同的順序存在於記錄中。

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.

回答

1

您需要繞過三列上的唯一鍵。表定義

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

真棒。我預計在幾個小時內不會有2-3分鐘的答案。有時候Stackoverflow就像閃電一樣。 – techdog 2011-05-13 01:02:16

+0

沒有概率,它就像做填字遊戲,甚至更好。這對有人來說很有趣,複雜而且有用,太棒了! – Igor 2011-05-13 01:05:53

+0

@丹尼爾:請不要忘記接受答案,直到現在你有0%的接受答案,這是不太刺激回答你的問題。閱讀常見問題:http://stackoverflow.com/faq – Igor 2011-05-13 01:21:28

2

示例您希望將UNIQUE約束添加到您的表。如果單獨編寫約束條件,則更清楚如何將其應用於任意列的組合。

CREATE TABLE table_name (
    subject1 VARCHAR(30), 
    subject2 VARCHAR(30), 
    subject3 VARCHAR(30), 
    UNIQUE (subject1, subject2, subject3) 
); 
0

要添加在現在的約束:

ALTER TABLE {tablename} 
ADD CONSTRAINT {constraintname} UNIQUE (subject1, subject2, subject3)