执行我的doDelete.php时,会显示以下错误消息:
“无法删除或更新父行:外键约束失败(fyp
。book
,CONSTRAINT book_user_key
FOREIGN KEY(id
)参考{{1} }(user
)ON DELETE NO ACTION ON UPDATE NO ACTION)“
删除查询:
id
来自3个表的检索信息查询:
$queryDelete = "DELETE FROM user WHERE id = $theUserID";
我的'book'和'user'表之间的关系是用户能够添加一本书。因此,用户ID被放置在书籍表中以识别哪个用户添加书籍。但是,当我想从我的PHP删除用户时,出现上述错误消息。这是检索用户ID以删除用户的片段。我该如何解决这个问题?
$query2 = "SELECT * FROM user,country,book where book.id=user.id AND user.country_id=country.country_id ORDER BY `user`.`id` ASC";
以下是相关表格
<td><form method="post" action="doDelete.php"><input type="hidden" name="theUserID" value="<?php echo $rows['id']; ?>" /><input type="submit" value="Delete" /</form></td>
答案 0 :(得分:1)
实际上,您在书籍表中有一个约束,只要该用户添加了书籍,就不会删除用户:
CONSTRAINT `book_user_key`
FOREIGN KEY (`user_id`)
REFERENCES `fyp`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
您可以将其更改为
ON DELETE CASCADE
这样删除用户也会删除所有图书。
或者您可以将约束设置为
ON DELETE SET NULL
并从book.user_id中删除NOT NULL:这将保留已删除用户的书籍,但将其user_id设置为NULL。
答案 1 :(得分:0)
您无法创建用户记录,因为它在 book 表中包含相关记录。这是外键约束的工作原理。您在此行中创建了此约束:
FOREIGN KEY (`user_id`) REFERENCES `fyp`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION
要解决此问题,您可以:
ON DELETE CASCADE
。这将导致 book 表中的记录将与 user 表中的相关记录一起自动删除。我更喜欢解决方案1,因为它可以让您获得更多控制权。它也不易出错,因为您必须始终显式删除2个表中的记录。在第二种情况下,您可能会意外地从数据库中删除大量数据。
答案 2 :(得分:0)
我相信您在 Book 表中有一个或多个 user_id (您要删除的)数据。
由于用户表中的 user_id 是用户中的外键 ID strong>表格,然后用户表格上的任何删除操作都将受到约束( book_user_key )的限制。
您可以在SQL中使用此查询来检查数据是否存在:
SELECT * FROM fyp.book WHERE user_id = ***[UserIDWhichYouWantToDelete]***
接下来就是,如果你在Book表中已有“User”数据,你打算做什么?
您可以在许多网站上找到更多关于 FOREIGN_KEY 的文献。