Beim Befehl create table wird ein 1022-Fehler bezüglich doppelter Schlüssel angezeigt. Nachdem ich mir die Abfrage angesehen habe, kann ich nicht verstehen, wo die Vervielfältigung stattfindet. Kann es noch jemand 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'
ON DELETE NO ACTION
würde einfach die gesamte Verwendung des Fremdschlüssels fallen lassen. Es sei denn, Sie haben ganz bestimmte Gründe dafür.Antworten:
Höchstwahrscheinlich haben Sie bereits eine Einschränkung mit dem Namen
iduser
oderidcategory
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 spezifische Tabelle, die Sie erstellen / ändern.
Um herauszufinden, wo die Einschränkungen derzeit verwendet werden, können Sie die folgende Abfrage verwenden:
quelle
Ändern Sie den Fremdschlüsselnamen in MySQL. Sie können nicht dieselben Fremdschlüsselnamen in den Datenbanktabellen haben.
Überprüfen Sie alle Ihre Tabellen und alle Fremdschlüssel und vermeiden Sie zwei Fremdschlüssel mit demselben genauen Namen.
quelle
Über die beiden Links " Erfolgreich gelöst" und " Namenskonvention" konnte ich das gleiche Problem, mit dem ich konfrontiert war, leicht lösen. Geben Sie für den Fremdschlüsselnamen fk _colName_ TableName an . Diese Namenskonvention ist nicht mehrdeutig und macht auch jeden ForeignKey in Ihrem DB-Modell einzigartig, und Sie werden diesen Fehler nie erhalten.
quelle
Wie bereits erwähnt, wird der Name für Ihre Einschränkung möglicherweise bereits von einer anderen Tabelle in Ihrer Datenbank verwendet . Sie müssen in der gesamten Datenbank eindeutig sein.
Eine gute Konvention zum Benennen von Fremdschlüsseleinschränkungen ist:
Um zu untersuchen, ob ein möglicher Konflikt vorliegt, können Sie alle von Ihrer Datenbank verwendeten Einschränkungen mit dieser Abfrage auflisten:
Als ich diese Abfrage ausführte, stellte ich fest, dass ich zuvor eine temporäre Kopie einer Tabelle erstellt hatte und diese Kopie bereits den Einschränkungsnamen verwendete, den ich verwenden wollte.
quelle
Ich habe gerade die letzten 4 Stunden mit dem gleichen Problem 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, damit ich die Anzahl der Vorkommen leicht verfolgen kann.
Beispiel
Wenn eine Einschränkung in einer Tabelle als Junge mit einem Fremdschlüssel X bezeichnet wird, kann die nächste Einschränkung mit dem Fremdschlüssel X als Junge1 bezeichnet werden
Ich bin sicher, Sie würden bessere Namen finden als ich. 🙂
quelle
Dies kann auch im Zusammenhang mit einem Fehler in bestimmten Versionen des Online-Schemaänderungstools von Percona Toolkit auftreten. Um eine große Tabelle zu mutieren, erstellt pt-osc zunächst eine doppelte Tabelle und kopiert alle Datensätze in diese. Unter bestimmten Umständen versuchen einige Versionen von pt-osc 2.2.x, den Einschränkungen für die neue Tabelle dieselben Namen zu geben wie den Einschränkungen für die alte Tabelle.
Ein Fix wurde in 2.3.0 veröffentlicht.
Weitere Informationen finden Sie unter https://bugs.launchpad.net/percona-toolkit/+bug/1498128 .
quelle
Ich bin auch auf dieses Problem gestoßen. Überprüfen Sie, ob der Datenbankname bereits in MySQL vorhanden ist, und benennen Sie den alten um.
quelle
Ich hatte dieses Problem beim Erstellen einer neuen Tabelle. Es stellt sich heraus, dass der von mir angegebene Fremdschlüsselname bereits verwendet wurde. Das Umbenennen des Schlüssels hat das Problem behoben.
quelle