Ich habe 2 Tabellen folgende unten:MySQL-Fehler beim Update Fremdschlüssel
CREATE TABLE `queststatus` (
`queststatusid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`characterid` int(11) NOT NULL DEFAULT '0',
`quest` int(6) NOT NULL DEFAULT '0',
`status` tinyint(4) NOT NULL DEFAULT '0',
`time` int(11) NOT NULL DEFAULT '0',
`forfeited` int(11) NOT NULL DEFAULT '0',
`customData` varchar(255) DEFAULT NULL,
PRIMARY KEY (`queststatusid`),
KEY `characterid` (`characterid`),
CONSTRAINT `queststatus_ibfk_1` FOREIGN KEY (`characterid`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2148654268 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED
und
CREATE TABLE `queststatusmobs` (
`queststatusmobid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`queststatusid` int(10) unsigned NOT NULL DEFAULT '0',
`mob` int(11) NOT NULL DEFAULT '0',
`count` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`queststatusmobid`),
KEY `queststatusid` (`queststatusid`),
CONSTRAINT `queststatusmobs_ibfk_1` FOREIGN KEY (`queststatusid`) REFERENCES `queststatus` (`queststatusid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
Also, wenn ich die queststatusid der Tabelle queststatus aktualisieren, verwende ich diesen Befehl, weil die queststatusid erreicht das Maximum von INT:
SET foreign_key_checks = 1;
SET @newid=0;
UPDATE queststatus SET queststatusid=(@newid:[email protected]+1) ORDER BY queststatusid;
Dieser Befehl sollte queststatususid der Tabelle queststatususms chang machen e wenn queststatususid von table queststatus aktualisiert wird, aber nicht. Es zeigt:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`twms`.`queststatus`, CONSTRAINT `queststatus_ibfk_1` FOREIGN KEY (`characterid`) REFERENCES `characters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
Ich habe alle nutzlos Fremdschlüssel gelöscht, die nicht in queststatus mit diesem Befehl zuerst:
DELETE FROM queststatusmobs WHERE queststatusid not in (SELECT queststatusid FROM queststatus);
Wie kann ich dieses Problem lösen?
Warum in aller Welt wollen Sie manuell die auto_increment Schlüssel ändern? –
weil der auto_increment Schlüssel das Maximum von INT erreicht, aber ich kann mein Programm nicht ändern. –
Ich glaube nicht, dass Sie das vollständige Bild bereitgestellt haben. Dein Fehler ist gegen die 'Zeichen'-Tabelle, nicht' queststatusmobs'. Ich vermute, du hast Zeilen in 'queststatus' mit falschen IDs für' characterid'. – user2045006