2016-05-03 18 views
1

Es gibt eine SQL-Tabelle wie die enter image description hereMySQL Einfügen gleiche Zeilen

Indizes wie die 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 

EDIT:

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

+0

Bei Fehlern des edit: Das ist, weil Sie bereits einige doppelten Daten in der Tabelle haben. Sie müssen es entfernen, bevor Sie die Einschränkung hinzufügen. Lassen Sie den früheren eindeutigen Index/Constraint fallen, er ist redundant. –

+0

@I_am_Batman vielen Dank. du hast mein Leben gerettet. –

Antwort

2

Ihr eindeutiger Index sollte nur auf iduser und idword Spalten für Ihre Anforderung sein.

Sie haben Index auf idusers_words,iduser and idword. Das bedeutet, Kombination aller drei Spalten sollte eindeutig sein.

Da idusers_words autoincrement ist, würden diese Kriterien immer erfüllt sein, obwohl idusers und idword Duplikate sind und Datensätze eingefügt werden.

1

Sie eine Einschränkung für eine Reihe von Feldern so ausdrücken kann:

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) 
) 

Quelle: http://www.w3schools.com/sql/sql_unique.asp

+0

ALTER TABLE users_words \t HINZUFÜGEN CONSTRAINT my_unique UNIQUE (iduser, idword); Ich versuchte diesen Code dann kommt Fehler "# 1062 - Eintrag '1-1' für Schlüssel 'my_unique'" –

+0

Dubletten In Datenbanken in der Regel sollten Sie die Daten vorbereiten, bevor Sie die Einschränkung hinzufügen können. Siehe dies - http://stackoverflow.com/questions/8053447/mysql-alter-ignore-table-gives-integrity-constraint-violation – Bulat

Verwandte Themen