wake-up-neo.com

Fehler 1022 - Schreiben nicht möglich; Schlüssel in der Tabelle duplizieren

Ich erhalte einen Fehler 1022 in Bezug auf doppelte Schlüssel in dem Befehl create table. Nachdem ich die Frage angesehen habe, kann ich nicht verstehen, wo die Duplizierung stattfindet. Kann es jemand anderes sehen? 

SQL query:

-- -----------------------------------------------------
-- Table `apptwo`.`usercircle`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS  `apptwo`.`usercircle` (

 `idUserCircle` MEDIUMINT NOT NULL ,
 `userId` MEDIUMINT NULL ,
 `circleId` MEDIUMINT NULL ,
 `authUser` BINARY NULL ,
 `authOwner` BINARY NULL ,
 `startDate` DATETIME NULL ,
 `endDate` DATETIME NULL ,
PRIMARY KEY (  `idUserCircle` ) ,
INDEX  `iduser_idx` (  `userId` ASC ) ,
INDEX  `idcategory_idx` (  `circleId` ASC ) ,
CONSTRAINT  `iduser` FOREIGN KEY (  `userId` ) REFERENCES  `apptwo`.`user` (
`idUser`
) ON DELETE NO ACTION ON UPDATE NO ACTION ,
CONSTRAINT  `idcategory` FOREIGN KEY (  `circleId` ) REFERENCES  `apptwo`.`circle` (
`idCircle`
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = INNODB;

MySQL said: Documentation

#1022 - Can't write; duplicate key in table 'usercircle' 
168
Git-able

Am wahrscheinlichsten haben Sie bereits eine Einschränkung mit dem Namen iduser oder idcategory in Ihrer Datenbank. Benennen Sie die Einschränkungen einfach um, wenn dies der Fall ist.

Einschränkungen müssen für die gesamte Datenbank eindeutig sein, nicht nur für die bestimmte Tabelle, die Sie erstellen oder ändern.

Um herauszufinden, wo die Einschränkungen derzeit verwendet werden, können Sie die folgende Abfrage verwenden:

SELECT `TABLE_SCHEMA`, `TABLE_NAME`
FROM `information_schema`.`KEY_COLUMN_USAGE`
WHERE `CONSTRAINT_NAME` IN ('iduser', 'idcategory');
418
Maksym Polshcha

Ändern Sie den Fremdschlüsselnamen in MySQL. Sie können nicht die gleichen Fremdschlüsselnamen in den Datenbanktabellen haben. 

Überprüfen Sie alle Ihre Tabellen und alle Fremdschlüssel und vermeiden Sie, dass zwei Fremdschlüssel mit demselben Namen verwendet werden.

26
Wassim Sabra

Von den beiden Links Erfolgreich gelöst und Naming Convention , Ich habe dieses Problem, mit dem ich konfrontiert war, leicht gelöst. d. h. für den Fremdschlüsselnamen geben Sie fk_ colName _TableName ein. Diese Namenskonvention ist eindeutig und macht jeden ForeignKey in Ihrem DB-Modell eindeutig. Sie erhalten diesen Fehler niemals.

Fehler 1022: Kann nicht schreiben; Schlüssel in der Tabelle duplizieren

13
Chandz

Ich habe gerade die letzten 4 Stunden mit derselben Ausgabe verbracht. Ich habe einfach sichergestellt, dass die Einschränkungen eindeutige Namen haben. 

Sie können die Einschränkungen umbenennen. Ich habe eine Nummer an meine angehängt, um die Anzahl der Vorkommnisse leicht nachvollziehen zu können.

Beispiel 

Wenn eine Einschränkung in einer Tabelle boy mit einem Fremdschlüssel X .__ benannt wird, kann die nächste Einschränkung mit dem Fremdschlüssel X boy1 genannt werden

Ich bin sicher, dass Sie bessere Namen herausfinden würden als ich. ????

3
Boxpositron

Dies kann auch in Verbindung mit einem Fehler in bestimmten Versionen des Online-Schema-Werkzeugs von Percona Toolkit auftreten. Um eine große Tabelle zu mutieren, erstellt pt-osc zuerst eine doppelte Tabelle und kopiert alle Datensätze in diese Tabelle. Unter bestimmten Umständen versuchen einige Versionen von pt-osc 2.2.x, den Einschränkungen der neuen Tabelle die gleichen Namen wie den Einschränkungen der alten Tabelle zu geben.

Ein Update wurde in 2.3.0 veröffentlicht.

Weitere Informationen finden Sie unter https://bugs.launchpad.net/percona-toolkit/+bug/1498128 .

2
MJD

Wie bereits erwähnt, ist es möglich, dass der Name für Ihre Einschränkung bereits von einer anderen Tabelle in Ihrer Datenbank verwendet wird . Sie müssen in der Datenbank eindeutig sein.

Eine gute Konvention zur Benennung von Fremdschlüsseleinschränkungen lautet:

fk_TableName_ColumnName

Um herauszufinden, ob ein Konflikt möglich ist, können Sie mit dieser Abfrage alle von Ihrer Datenbank verwendeten Einschränkungen auflisten:

SELECT * FROM information_schema.table_constraints WHERE constraint_schema = 'YOUR_DB';

Als ich diese Abfrage ausführte, stellte ich fest, dass ich zuvor eine temporäre Kopie einer Tabelle erstellt hatte. Diese Kopie verwendete bereits den Einschränkungsnamen, den ich verwenden wollte.

2
Simon East

Dieses Problem ist auch aufgetreten. Überprüfen Sie, ob der Datenbankname bereits in Mysql vorhanden ist, und benennen Sie den alten Namen um.

1
user2338925

Ich hatte dieses Problem beim Erstellen einer neuen Tabelle. Es stellte sich heraus, dass der von mir angegebene Fremdschlüsselname bereits verwendet wurde. Umbenennen des Schlüssels behoben.

0
user3076750