我在数据库中有三个表。
表1
项目
PK ProjectID
表2
生
PK RegNo
FK ProjectID
表3
进步
FK RegNo
现在,当我从项目中删除记录时,我想要执行删除操作,它应该从学生中删除,因为学生主键也作为外键进度表出现,所以它也应该从进度表中删除RegNo 。我怎样才能以最好的方式实现这一目标。提前谢谢。
$query = "DELETE students, progress from students inner join progress on progress.RegNo=students.RegNo where students.ProjectID='$id';DELETE FROM projects where projects.ProjectID='$id'";
//$conn->exec($query);
$stmt = $conn->prepare($query);
$stmt->execute();
它给出了外键约束违规
答案 0 :(得分:1)
将删除拆分为单独的查询可能更容易。
DELETE FROM `progress`
WHERE `RegNo` IN(
SELECT `RegNo` FROM `students` WHERE ProjectID = '$id'
);
DELETE FROM `student` WHERE `ProjectID` = '$id';
DELETE FROM `projects` WHERE `ProjectID` = '$id';