【问题标题】:MySQL: referencing foreign keysMySQL:引用外键
【发布时间】:2013-01-25 14:03:46
【问题描述】:

我试图在 mysql 中将外键引用到它的父键,但遇到了一个尴尬的错误。

我已经尝试了以下方法。

ALTER TABLE `website`
  ADD CONSTRAINT `website_cms_fk1` FOREIGN KEY (`cms_id`) REFERENCES `cms_technology` (`ID`);

还有

ALTER TABLE website ADD FOREIGN KEY (cms_id) REFERENCES cms_technology (ID)

我收到以下错误。

*#1005 - 无法创建表 'script.#sql-5203_110b8ba' (errno: 150)*

以下是我的表格

CREATE TABLE IF NOT EXISTS `cms_technology` (
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `cms_name` varchar(250) NOT NULL DEFAULT '',
  `cms_description` varchar(250) NOT NULL DEFAULT '',
  PRIMARY KEY (`ID`)
);

INSERT INTO `cms_technology` (`ID`, `cms_name`, `cms_description`) VALUES
(1, 'Wordpress', 'WordPress › Blog Tool, Publishing Platform, and CMS');

CREATE TABLE IF NOT EXISTS `website` (
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `website_url` varchar(60) NOT NULL DEFAULT '',
  `website_ip` varchar(20) NOT NULL DEFAULT '',
  `website_title` varchar(250) NOT NULL DEFAULT '',
  `website_status` varchar(10) NOT NULL DEFAULT '',
  `website_scanned` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `website_response` int(3) NOT NULL DEFAULT '0',
  `cms_id` int(5)  NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`)
);

INSERT INTO `website` (`ID`, `website_url`, `website_ip`, `website_title`, `website_status`, `website_scanned`, `website_response`, `website_cms`) VALUES
(1, 'http://www.wpbeginner.com/', '', '', '', '0000-00-00 00:00:00', 0, 0);

我做错了什么?

【问题讨论】:

  • 试试 :: ALTER TABLE website MODIFY FOREIGN KEY (cms_id) REFERENCES cms_technology (ID)

标签: mysql foreign-keys


【解决方案1】:

您需要从表website 更改列cms_ID 的数据类型,以便引用表cms_technology。 to 列的属性必须相同。

CREATE TABLE IF NOT EXISTS `website` (
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `website_url` varchar(60) NOT NULL DEFAULT '',
  `website_ip` varchar(20) NOT NULL DEFAULT '',
  `website_title` varchar(250) NOT NULL DEFAULT '',
  `website_status` varchar(10) NOT NULL DEFAULT '',
  `website_scanned` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `website_response` int(3) NOT NULL DEFAULT '0',
  `cms_id` bigint(20) unsigned NOT NULL,                        -- <<== HERE
  PRIMARY KEY (`ID`)
);

【讨论】:

  • 我认为这可以解决问题,我更改了数据类型属性以匹配,但仍然得到相同的错误。
  • 同一个,但现在已修复,我在主键之后添加了 KEY cms_id (cms_id) 并且约束有效
【解决方案2】:

我错过了 KEY cms_id (cms_id)

 CREATE TABLE IF NOT EXISTS `website` (
      `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `website_url` varchar(60) NOT NULL DEFAULT '',
      `website_ip` varchar(20) NOT NULL DEFAULT '',
      `website_title` varchar(250) NOT NULL DEFAULT '',
      `website_status` varchar(10) NOT NULL DEFAULT '',
      `website_scanned` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
      `website_response` int(3) NOT NULL DEFAULT '0',
      `cms_id` bigint(20) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (`ID`),
      KEY `cms_id` (`cms_id`)
    );

ALTER TABLE `website`
  ADD CONSTRAINT `website_cms_fk1` FOREIGN KEY (`cms_id`) REFERENCES `cms_technology` (`ID`);

【讨论】:

  • 定义外键时,不需要在cms上显式定义key。 see this
猜你喜欢
  • 2015-01-26
  • 2010-11-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多