我正在尝试在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也成为了bar中fooID的外键。 我面临的唯一问题是当我尝试插入任何一个时都会出现完整性问题。 我想要一些帮助,谢谢。
答案 0 :(得分:4)
关系数据库中真正的一对一关系最好通过添加列来完成;如果每个记录始终需要这两个表中的数据,那么该表应定义为foo(fooID,name,barname)。
答案 1 :(得分:1)
您可以将约束检查推迟到交易结束。但是我没有为MySQL找到任何东西(它不是最先进的数据库)。对于PostgreSQL(其他语法各不相同):
ALTER TABLE foo ADD FOREIGN KEY (fooID) REFERENCES bar DEFERRABLE;
这意味着将在交易结束时检查约束。
如果你必须使用MySQL,请使用Chris Shaffer回答。
答案 2 :(得分:0)
我找到了一个“ hacky ”解决方案,可以使用变量 foreign_key_checks 。
如果有人改变foo中的fooID以在bar中有一个外键约束,那么就可以插入那个
SET foreign_key_checks = 0;
INSERT...;
INSERT...;
SET foreign_key_checks = 1;
正如我所说的“ hacky ”,我可能不会在生产系统上这样做。