【问题标题】:How to create database with foreign keys如何使用外键创建数据库
【发布时间】:2017-12-12 14:04:12
【问题描述】:

我在尝试填充我的固定装置时遇到了问题。我有 2 张桌子(客户和合作伙伴)。

CREATE TABLE `partner` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `client_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `client_id` (`client_id`),
  CONSTRAINT `partner_ibfk_3` FOREIGN KEY (`client_id`) REFERENCES `client` 
  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `client` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `partner_id` tinyint(3) unsigned DEFAULT NULL,
  `partner_ref` varchar(7) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `partner_ref` (`partner_ref`,`partner_id`),
  KEY `partner_id` (`partner_id`),
  CONSTRAINT `client_ibfk_1` FOREIGN KEY (`partner_id`) REFERENCES `partner` 
  (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=667305 DEFAULT CHARSET=utf8 PACK_KEYS=0;

当我运行我的装置时,我遇到了这个问题:

ERROR 1215 (HY000) at line 863: 无法添加外键约束

我想这是因为在创建表“合作伙伴”时,表“客户”不是,所以找不到外键。

但是,如果我更改并将“客户”放在“合作伙伴”之前,问题是一样的。

感谢您的帮助!

【问题讨论】:

  • innodb 在我问这个问题时没有应用标签!

标签: mysql sql database foreign-keys innodb


【解决方案1】:

我找到了解决办法:

我在创建“合作伙伴”时删除了约束,并在使用 ALTER TABLE 创建“客户”后添加了此约束:

CREATE TABLE `partner` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `client_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `client_id` (`client_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `client` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `partner_id` tinyint(3) unsigned DEFAULT NULL,
  `partner_ref` varchar(7) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `partner_ref` (`partner_ref`,`partner_id`),
  KEY `partner_id` (`partner_id`),
  CONSTRAINT `client_ibfk_1` FOREIGN KEY (`partner_id`) REFERENCES `partner` 
  (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=667305 DEFAULT CHARSET=utf8 PACK_KEYS=0;

ALTER TABLE `partner`
ADD CONSTRAINT `partner_ibfk_3` FOREIGN KEY (`client_id`) REFERENCES 
`client` (`id`);

【讨论】:

  • 这似乎是正确的答案。请将其标记为已接受的答案。
  • 我暂时不能接受,我要等2天才能接受我自己的答案。
猜你喜欢
  • 2016-08-26
  • 2014-06-28
  • 1970-01-01
  • 2019-07-02
  • 2015-04-19
  • 1970-01-01
  • 2020-03-03
  • 2011-12-24
  • 2017-08-16
相关资源
最近更新 更多