[英]MySQL: Cannot delete or update a parent row: a foreign key constraint fails
Hi i am trying to make simple database with 2 tables, first for user information, and second for their uploads, because it's project for faculty, i have some assignments... And one is to use foreign key. 嗨,我正在尝试使用2个表制作简单的数据库,首先用于用户信息,其次用于用户上传,因为这是教职员工的项目,我要分配一些工作...而其中一个是使用外键。
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');
ERROR: 错误:
ERROR 1217 (23000) at line 14: Cannot delete or update a parent row: a foreign key constraint fails
Anybody now where is the probel and how could i fix it? 现在有人在哪里探子,我该如何解决? It also doesn't work on sqlfiddle when i insert some values for testing.
当我插入一些测试值时,它在sqlfiddle上也不起作用。 Thanks :)
谢谢 :)
You have child record and so since you have put the ON DELETE RESTRICT as well as
ON UPDATE RESTRICT constraints(I mean as they are default ) whatever changes you make on the parent row ie a row in korisnici table with child rows in slike table will be restricted by
MySQL .
你有孩子记录等,因为你已经把ON DELETE RESTRICT和
ON UPDATE RESTRICT约束(我的意思是,他们是默认的 ),你就父行即行korisnici表与S形表子行的任何更改将受
MySQL限制。
Now for deletion you can do something like this: 现在要删除,您可以执行以下操作:
DELETE FROM `slike` WHERE `UserID`=`<UserId you want to delete>`; DELETE FROM `korisnici` WHERE `UserID`=`<UserId you want to delete>`;
And for Updation... 为了更新...
I think the error message is actually misleading. 我认为错误消息实际上是令人误解的。 What I see from your code is that it is the insert into SLIKE that fails because UserID=2 does not match the UserID of the previous insert into KORISNICI.
我从您的代码中看到的是,由于UserID = 2与先前插入KORISNICI的UserID不匹配,因此SLIKE的插入失败。
There's really no point to choose ON DELETE CASCADE . 选择ON DELETE CASCADE确实没有意义。 So the alternative would be to allow the foreign key to be NULL and then choose ON DELETE SET NULL .
因此,替代方法是允许外键为NULL ,然后选择ON DELETE SET NULL 。
Personally I would use " ON UPDATE CASCADE " pared with " ON DELETE SET NULL " to avoid unnecessary complications, but on your set up you may want a different approach. 我个人将“ ON UPDATE CASCADE ”与“ ON DELETE SET NULL ”相对应,以避免不必要的复杂性,但是在您进行设置时,您可能需要其他方法。
Hope this helps. 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.