MySQL Fehler - Duplicate Entry '2' for key 8

Hallo zusammen,

habe folgende Tabelle erstellt und auch einen ersten Datensatz einfuegen koennen. Beim zweiten Einfuegen kommt aber der Fehler "Duplicate entry '2' for key 8 ".

Wenn ich in key 8, also OSID denselben Wert eingebe wie im ersten Datensatz dann kommt der Fehler bei key 5. Und wenn ich dort dasselbe mache wie bei key 8 dann kommt der Fehler bei key 3.
Langsam werd ich wahnsinnig, bitte helft mir! Danke schon vorab! ;-)
CREATE TABLE cds (
CDID int NOT NULL auto_increment,
CDDesc varchar(80) NOT NULL default '',
CDComments text,
FolderNr int NOT NULL default '0',
ProdID int NOT NULL default '0',
VersionID int NOT NULL default '0',
PrintDateID int NOT NULL default '0',
OSID int NOT NULL default '0',
LanguageID int NOT NULL default '0',
InUseByID int NOT NULL default '0',
FolderPageID int NOT NULL default '0',
UserID int NOT NULL default '0',
PRIMARY KEY (CDID),
UNIQUE KEY ProdID (ProdID),
UNIQUE KEY VersionID (VersionID),
UNIQUE KEY PrintDateID (PrintDateID),
UNIQUE KEY OSID (OSID),
UNIQUE KEY LanguageID (LanguageID),
UNIQUE KEY InUseByID (InUseByID),
UNIQUE KEY FolderPageID (FolderPageID),
UNIQUE KEY UserID (UserID)
) TYPE=INNODB;

erster insert: "INSERT INTO cds (CDID, CDDesc, CDComments, FolderNr, ProdID, VersionID, PrintDateID, OSID, LanguageID, InUseByID, FolderPageID, UserID) VALUES("1", " 4.1.1 Application CD for Windows German", "Scratched a bit, give it time to load", "3", "1", "1", "1", "1", "2", "1", "2", "1");

zweiter insert: "INSERT INTO cds (CDID, CDDesc, CDComments, FolderNr, ProdID, VersionID, PrintDateID, OSID, LanguageID, InUseByID, FolderPageID, UserID) VALUES("2", "SQL Server 2000", "", "5", "3", "3", "2", "2", "3", "3", "2", "2");
 
Da du alle Felder als UNIQUE deklariert hast, darf natürlich jeder Eintrag nur einmal vorkommen. In Feld 8 trägst du aber beide mal 2 ein.
Wenn ich das bei mir ändere, funktioniert Insert 2.

Code:
zweiter Insert: INSERT INTO cds (CDID, CDDesc, CDComments, FolderNr, ProdID, VersionID, PrintDateID, OSID, LanguageID, InUseByID, FolderPageID, UserID) VALUES("2", "SQL Server 2000", "", "5", "3", "3", "2", "2", "3", "3", "3", "2");
 
Zuletzt bearbeitet:
Oh Mann,

ich bin vielleicht bloed! Ich hab die Felder alle gezaehlt und nicht nur die Keys! Das war ne gute Lektion, danke! :)

Ich haette aber noch eine Frage - mir geht's ja darum einen unique key auf all diese Felder zu setzen weil ich sie als foreign keys fuer all die anderen Tabellen brauchte.
Ich muss doch aber in dieser Tabelle die Moeglichkeit haben denselben ProdID, z.B. einzufuegen - wie mach ich das?
Ich seh ein dass ein Unique Key mir das nicht erlauben wird aber wie kann ich dann foreign keys erstellen die zu meinen anderen Tabellen linken?
Danke!
 
Ich glaube du solltest für so Sache wie OS, Language und so weiter jeweils eine eigene Tabelle mit einem eindeutigen Schlüssel anlegen und in diese dann in der Tabelle CDS als Foreign Key angeben.
Code:
table OS
 PK id

table language
 PK id

table CDS
 FOREIGN KEY (`osid`) REFERENCES `os` (`id`)
 FOREIGN KEY (`languageid`) REFERENCES `language` (`id`)

P.S.: Schau dir doch mal den DBDesigner auf fabForce.net mal an. Der erleichtert sowas ungemein.
 
Zurück