2013-02-10 79 views
0

我想引用一个外键到它的父键在MySQL中,我得到一个尴尬的错误。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 - 无法创建表(错误: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); 

我做什么我错了 '脚本#SQL-5203_110b8ba。'?

+0

尝试:: 'ALTER TABLE网站MODIFY外键(cms_id)参考cms_technology( ID)' – 2013-02-10 07:39:07

回答

2

您需要更改表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`) 
); 
+0

我认为这将解决问题,我chan ged的数据类型属性匹配,并仍然得到相同的错误。 – 2013-02-10 07:48:59

+0

什么是完整的错误信息? – 2013-02-10 07:51:57

+0

同样的一个,但现在已经修复了,我在主键后添加了KEY'cms_id'('cms_id'),并且当你定义一个外键时约束工作了 – 2013-02-10 07:53:12

0

我错过了KEY cms_idcms_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`); 
+0

,你不需要明确地定义关于cms的键。 [**见此**](http://www.sqlfiddle.com/#!2/31e8f/3) – 2013-02-10 08:37:15