繁体   English   中英

MySQL中的一对一关系

[英]One to One relationship in MySQL

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

关系数据库中真正的一对一关系最好通过添加一列来完成。 如果每条记录始终需要这两个表中的数据,则应将该表定义为foo(fooID,名称,barname)。

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

ALTER TABLE foo ADD FOREIGN KEY (fooID) REFERENCES bar DEFERRABLE;

这意味着将在交易结束时检查约束。

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

我找到了一个“ hacky ”解决方案,可以使用变量foreign_key_checks

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

SET foreign_key_checks = 0;
INSERT...;
INSERT...;
SET foreign_key_checks = 1;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM