无法删除或更新父行,外键约束失败

时间:2015-12-02 14:49:58

标签: php mysql

我收到错误说"无法删除或更新父行,外键约束失败。"当我试图更新团队表中的值时。我究竟做错了什么?

$createTeam ="CREATE TABLE Team(
    teamName VARCHAR(30) not null,
    division VARCHAR(30) not null,
    photo VARCHAR(30),
    primary key(teamName, division)
    )
    engine=innodb";


$createParticipant ="CREATE TABLE Participant(
    participantName VARCHAR(30) not null,
    techniqueResult DOUBLE(10,2),
    trickResult INT(10),
    teamName VARCHAR(30) not null,
    division VARCHAR(30) not null,
    primary key (participantName),
    foreign key (teamName, division) references Team(teamName, division)
    ON DELETE CASCADE
    )
    engine=innodb";




$updateTeam = "UPDATE Team SET teamName = '$newTeamName' , division = '$newDivision' WHERE teamName = '$oldTeamName' AND division ='$oldDivision'";

1 个答案:

答案 0 :(得分:0)

您需要重新考虑您的架构。

TeamDivision似乎应该是两个具有自己ID的独立实体。

现在,根据您的商业模式,如果Participant只能在一个Team和一个Division中,那么您只需在参与者中添加两个外键即可引用TeamDivision分别。

如果Participant可能多于Teams和/或Divisions,则需要引入一个概念性实体DivisionTeamParticipant,该实体将包含多行外键TeamDivisionParticipant

编辑@paulF

如果您的层次结构严格应该是:Division - > Team - > Participant。因此,您只需要Team中的外键引用DivisionParticipant中的外键引用团队。