我正在尝试在MySQL数据库中建立一对一的关系。我正在使用InnoDB引擎,基本表如下所示:
CREATE TABLE `foo` (
`fooID` INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name` TEXT NOT NULL
)
CREATE TABLE `bar` (
`barName` VARCHAR(100) NOT NULL,
`fooID` INT(11) NOT NULL PRIMARY KEY,
CONSTRAINT `contact` FOREIGN KEY (`fooID`) REFERENCES `foo`(`fooID`)
)现在,一旦我设置好它们,我就修改foo表,以便fooID也成为fooID in bar的外键。我面临的唯一问题是,当我尝试插入其中任何一个时,都会出现完整性问题。我需要一些帮助,谢谢。
发布于 2010-03-12 02:25:49
关系数据库中真正的一对一关系最好通过添加一列来完成;如果这两个表中的数据对于每条记录都是必需的,那么应该将该表定义为foo (fooID,name,barname)。
发布于 2010-03-12 03:00:38
您可以将约束检查推迟到事务结束时进行。然而,我还没有找到MySQL的任何东西(它不是最高级的数据库)。对于PostgreSQL (对于其他,语法会有所不同):
ALTER TABLE foo ADD FOREIGN KEY (fooID) REFERENCES bar DEFERRABLE;这意味着将在事务结束时检查约束。
如果必须使用MySQL,请使用Chris Shaffer回答。
发布于 2010-03-14 23:15:24
我发现了一个“老生常谈”的解决方案,可以使用变量foreign_key_checks。
如果将foo中的fooID修改为在bar中具有外键约束,则可以这样插入
SET foreign_key_checks = 0;
INSERT...;
INSERT...;
SET foreign_key_checks = 1;正如我所说的"hacky“,我可能不会在生产系统上这样做。
https://stackoverflow.com/questions/2427501
复制相似问题