您好我正在尝试使用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
现在有人在哪里问题,我该如何解决?当我插入一些测试值时,它也无法在sqlfiddle上工作。 谢谢:))
答案 0 :(得分:1)
你有子记录,因为你已经把 ON DELETE RESTRICT 以及 ON UPDATE RESTRICT 约束(我的意思是因为它们是默认 i>)您在父行上所做的任何更改,即 sor 表中的行中 slike 表中的子行将受 MySQL 的。
现在删除你可以这样做:
DELETE FROM `slike` WHERE `UserID`=`<UserId you want to delete>`;
DELETE FROM `korisnici` WHERE `UserID`=`<UserId you want to delete>`;
对于更新......
答案 1 :(得分:1)
我认为错误信息实际上是误导性的。我从你的代码中看到的是,SLIKE中的插入失败了,因为UserID = 2与前一个插入到KORISNICI中的UserID不匹配。
答案 2 :(得分:0)
选择 ON DELETE CASCADE 真的没有意义。因此,替代方法是允许外键为 NULL ,然后选择 ON DELETE SET NULL 。
我个人会使用&#34; ON UPDATE CASCADE &#34;与&#34; ON DELETE SET NULL &#34;相比较为避免不必要的复杂情况,但在您的设置中,您可能需要采用不同的方法。
希望这有帮助。