MySQL: löschen kann Nicht oder update a parent row: a foreign key constraint fails
Hallo, ich versuche, einfache Datenbank mit 2 Tabellen, die erste für die Benutzer-Informationen, und zweitens für Ihre uploads, weil es-Projekt für die Fakultät, ich habe einige Aufgaben... Und eine ist foreign key.
DROP TABLE IF EXISTS `korisnici`;
CREATE TABLE `korisnici` (
`UserID` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(12) NOT NULL,
`password` VARCHAR(32) NOT NULL,
`email` VARCHAR(32) NOT NULL,
`telefon` VARCHAR(16) NOT NULL,
PRIMARY KEY (`UserID`)
);
DROP TABLE IF EXISTS `slike`;
CREATE TABLE `slike` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NOT NULL,
`size` INTEGER(11) NOT NULL,
`type` VARCHAR(200) NULL,
`file_path` VARCHAR(200) NOT NULL,
`username` VARCHAR(12) NOT NULL,
`naslov` VARCHAR(32) NOT NULL,
`adresa` VARCHAR(80) NOT NULL,
`opis` VARCHAR(1200) NOT NULL,
`datum` DATE NOT NULL,
`UserID` INTEGER(11) NOT NULL,
PRIMARY KEY (`id`)
);
ALTER TABLE `slike` ADD FOREIGN KEY (UserID) REFERENCES `korisnici` (`UserID`);
-- ALTER TABLE `korisnici` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- ALTER TABLE `slike` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- ---
-- Test Data
-- ---
INSERT INTO `korisnici` (`UserID`,`username`,`password`,`email`,`telefon`) VALUES('1','dd','d','d','d');
INSERT INTO `slike` (`id`,`name`,`size`,`type`,`file_path`,`username`,`naslov`,`adresa`,`opis`,`datum`,`UserID`) VALUES('2','a','122','png','ksks/sss','dsss','aaaa','sss','ssss','2014/09/04','2');
FEHLER:
ERROR 1217 (23000) at line 14: Cannot delete or update a parent row: a foreign key constraint fails
Jemand, wo jetzt das probel und wie könnte ich es beheben? Es auch funktioniert nicht auf sqlfiddle wenn ich legen Sie einige Werte für die Prüfung.
Danke 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, die Fehlermeldung ist etwas irreführend. Was ich sehe, aus deinem code ist, dass es das einfügen in SLIKE, das schlägt fehl, weil UserID=2 nicht entsprechen, die die Benutzer-id von der vorhergehenden insert into KORISNICI.
Du haben, Kind nehmen und so, da Sie die ON DELETE RESTRICT sowie ON UPDATE RESTRICT constraints(ich meine, wie Sie sind Standard) was auch immer änderungen, die Sie auf der übergeordneten Zeile, also eine Zeile in korisnici - Tabelle mit den untergeordneten Zeilen in slike - Tabelle eingeschränkt werden, indem MySQL.
Jetzt für die Löschung können Sie etwas wie das hier tun:
Und für die Updation...
Sowieso die bessere option, immer noch die entsprechenden foeign Einschränkungen, während die Angabe oder die Festlegung der Fremdschlüssel.
Um etwas mehr info finden Sie dieser link
slike
ADD FOREIGN KEY (UserID
) REFERENZENkorisnici
(UserID
) ON DELETE CASCADE ON UPDATE CASCADE; nur dass die? Ich glaube, dass und immer noch nicht funktioniert 🙁Es gibt wirklich keinen Punkt zu wählen ON DELETE CASCADE. Also die alternative wäre, dass die Fremdschlüssel NULL und wählen Sie dann ON DELETE SET NULL.
Persönlich würde ich "ON UPDATE CASCADE" verglichen mit "ON DELETE SET NULL" vermeiden Sie unnötige Komplikationen, sondern auf der Einrichtung, möchten Sie vielleicht einen anderen Ansatz.
Hoffe, das hilft.