首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的一对一关系

问MySQL中的一对一关系
EN

Stack Overflow用户
提问于 2010-03-12 02:14:59
回答 3查看 3.8K关注 0票数 5

我正在尝试在MySQL数据库中建立一对一的关系。我正在使用InnoDB引擎,基本表如下所示:

代码语言:javascript
复制
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的外键。我面临的唯一问题是,当我尝试插入其中任何一个时,都会出现完整性问题。我需要一些帮助,谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-12 02:25:49

关系数据库中真正的一对一关系最好通过添加一列来完成;如果这两个表中的数据对于每条记录都是必需的,那么应该将该表定义为foo (fooID,name,barname)。

票数 4
EN

Stack Overflow用户

发布于 2010-03-12 03:00:38

您可以将约束检查推迟到事务结束时进行。然而,我还没有找到MySQL的任何东西(它不是最高级的数据库)。对于PostgreSQL (对于其他,语法会有所不同):

代码语言:javascript
复制
ALTER TABLE foo ADD FOREIGN KEY (fooID) REFERENCES bar DEFERRABLE;

这意味着将在事务结束时检查约束。

如果必须使用MySQL,请使用Chris Shaffer回答。

票数 1
EN

Stack Overflow用户

发布于 2010-03-14 23:15:24

我发现了一个“老生常谈”的解决方案,可以使用变量foreign_key_checks。

如果将foo中的fooID修改为在bar中具有外键约束,则可以这样插入

代码语言:javascript
复制
SET foreign_key_checks = 0;
INSERT...;
INSERT...;
SET foreign_key_checks = 1;

正如我所说的"hacky“,我可能不会在生产系统上这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2427501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档