2016-05-03 40 views
1

有一個SQL表那樣 enter image description hereMySQL的插入相同的行

指標像 enter image description here

INSERT INTO users_words(iduser,idword,status_of_word) VALUES(4,6,2); 
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(4,6,1); 
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(4,6,0); 
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(5,6,0); 
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(8,7,1); 
INSERT INTO users_words(iduser,idword,status_of_word) VALUES(8,9,2); 

I want to a unique index is together with iduser,idword. How to avoid inserting query with same values together index columns? For example: Bloking row inserting like 13 and 14 (idusers_words) rows

SELECT * FROM users_words; 

> idusers_words | iduser | idword | status_of_word | 
     12    4  6   2 
     13    4  6   1 
     14    4  6   0 
     15    5  6   0 
     16    8  7   1 
     17    8  9   2 

編輯:

I tried this code. But comes that error "#1062 - Duplicate entry '1-1' for key 'my_unique'"

ALTER TABLE users_words 
ADD CONSTRAINT my_unique UNIQUE(iduser,idword); 
+0

在編輯的錯誤:那是因爲你已經在表中的一些重複的數據。在添加約束之前,您必須將其刪除。此外,放棄較早的唯一索引/約束,這是多餘的。 –

+0

@I_am_Batman非常感謝你。你救了我的命。 –

回答

2

您的唯一索引應該只在iduseridword列滿足您的要求。

您有索引idusers_words,iduser and idword.這意味着所有三列的組合應該是唯一的。

由於idusers_words是自動增量,因此即使idusers和idword重複,也會插入記錄,因此始終會滿足此條件。

1

你可以把一個約束在這樣一組字段:

CREATE TABLE Persons 
(
P_Id int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Address varchar(255), 
City varchar(255), 
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) 
) 

來源:http://www.w3schools.com/sql/sql_unique.asp

+0

ALTER TABLE users_words \t ADD CONSTRAINT my_unique UNIQUE(iduser,idword); 我試過這段代碼,然後 出現錯誤「#1062 - 關鍵'my_unique'的重複條目'1-1'」 –

+0

在數據庫中,通常你應該準備數據,然後才能添加約束。看到這個 - http://stackoverflow.com/questions/8053447/mysql-alter-ignore-table-gives-integrity-constraint-violation – Bulat