Php 更新外键

Php 更新外键,php,mysql,foreign-keys,Php,Mysql,Foreign Keys,我必须更新外键,但我不知道它是如何完成的。 以下是我的表格: CREATE TABLE `mydb`.`mannschaft` ( `mannschaftID` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(50) NOT NULL , `stufe` INT NOT NULL, `trainer` INT NOT NULL, PRIMARY KEY (`mannschaftID`), FOREIGN KEY (`trainer`) REFER

我必须更新外键,但我不知道它是如何完成的。 以下是我的表格:

CREATE TABLE `mydb`.`mannschaft` ( 
`mannschaftID` INT NOT NULL AUTO_INCREMENT , 
`name` VARCHAR(50) NOT NULL , 
`stufe` INT NOT NULL,
`trainer` INT NOT NULL, 
PRIMARY KEY (`mannschaftID`),
FOREIGN KEY (`trainer`) REFERENCES `trainer`(`trainerID`),
FOREIGN KEY (`stufe`) REFERENCES `stufe`(`stufeID`)
) ENGINE = InnoDB CHARACTER SET latin1 COLLATE latin1_german1_ci;

CREATE TABLE `mydb`.`spieler` ( 
`spielerID` INT NOT NULL AUTO_INCREMENT , 
`name` VARCHAR(50) NOT NULL , 
`vorname` VARCHAR(50) NOT NULL ,  
`jahrgang` VARCHAR(10) NOT NULL ,
`bemerkung` VARCHAR(300) NOT NULL,
`mannschaft` INT NOT NULL, 
PRIMARY KEY (`spielerID`),
FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`)
) ENGINE = InnoDB CHARACTER SET latin1 COLLATE latin1_german1_ci;
如果我这样做:

SHOW CREATE table course;
我得到以下信息:

CREATE TABLE `spieler` (
 `spielerID` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(50) COLLATE latin1_german1_ci NOT NULL,
 `vorname` varchar(50) COLLATE latin1_german1_ci NOT NULL,
 `jahrgang` varchar(10) COLLATE latin1_german1_ci NOT NULL,
 `bemerkung` varchar(300) COLLATE latin1_german1_ci NOT NULL,
 `mannschaft` int(11) NOT NULL,
 PRIMARY KEY (`spielerID`),
 KEY `mannschaft` (`mannschaft`),
 CONSTRAINT `spieler_ibfk_1` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`),
 CONSTRAINT `spieler_ibfk_2` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`),
 CONSTRAINT `spieler_ibfk_3` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`),
 CONSTRAINT `spieler_ibfk_4` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`),
 CONSTRAINT `spieler_ibfk_5` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`),
 CONSTRAINT `spieler_ibfk_6` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft`     (`mannschaftID`),
 CONSTRAINT `spieler_ibfk_7` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1     COLLATE=latin1_german1_ci
我喜欢这样做:

    $sql = "UPDATE `spieler` SET `mannschaft` = '0' WHERE `spielerID` = '".$id."'";
但我得到了这个错误:

    Error deleting record: Cannot add or update a child row: a foreign key constraint fails (`mydb`.`spieler`, CONSTRAINT `spieler_ibfk_1` FOREIGN KEY (`mannschaft`) REFERENCES `mannschaft` (`mannschaftID`))
我想我必须删除密钥,然后更新字段,然后再创建它? 我该怎么做?
感谢@BenjaminPaap的评论为我解决了问题。

来自@BenjaminPaap的评论为我解决了问题。

如果您想要
spieler
条目与任何
mannschaft
条目都不关联,使
mannschaft
字段为空,并使用
SET mannschaft=NULL
更新
spieler
条目。错误消息只是告诉您,
mannschaft
表中没有id为
0
@BenjaminPaap的条目,谢谢您的快速回复。非常简单的解决方案,我甚至没有想过这一点。我会尽快尝试的。@BenjaminPaap终于有时间测试了它,它就像一个符咒,谢谢!如果您想让
spieler
条目与任何
mannschaft
条目不关联,请将
mannschaft
字段设置为空,并使用
SET mannschaft=NULL
更新
spieler
条目。错误消息只是告诉您,
mannschaft
表中没有id为
0
@BenjaminPaap的条目,谢谢您的快速回复。非常简单的解决方案,我甚至没有想过这一点。我会尽快尝试的。@BenjaminPaap终于有时间测试了它,它就像一个符咒,谢谢!