2013-10-03 121 views
0

我使用这个脚本在MySQL:创建复合外键

CONSTRAINT `customer_contact_geolocation_id_fk` FOREIGN KEY(`customer_contact_geolocation`, `customer_contact_company_id`) 
REFERENCES `geolocation` (`geolocation_id`, `geolocation_company_id`) ON DELETE NO ACTION 
)  
ENGINE=InnoDB DEFAULT CHARSET=utf8; 
/*!40101 SET character_set_client = @saved_cs_client */; 

这是一个CREATE TABLE语句的一部分。当我导入它时,它不显示错误。但是当我使用工作台检查表时,外键不会被创建。此外,FK它不适用于我的应用程序。我是否必须更改此复合fk的某些设置才能工作?

我要添加一个简单的脚本:

DROP TABLE IF EXISTS `companies`; 
CREATE TABLE `companies` (
`company_id` int(11) NOT NULL AUTO_INCREMENT, 
`company_name` varchar(200) NOT NULL, 
`company_address` varchar(200) NOT NULL, 
`company_tax_id` varchar(200) NOT NULL, 
`company_minimun_margin` float NOT NULL, 
`company_currency` varchar(20) NOT NULL, 
`company_fiscal_currency` varchar(20) NOT NULL, 
`company_max_rows` int(11) DEFAULT NULL, 
`company_max_file_size` int(11) DEFAULT NULL, 
PRIMARY KEY (`company_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `geolocation`; 

CREATE TABLE `geolocation` (
`geolocation_id` varchar(20) NOT NULL, 
`geolocation_company_id` int(11) NOT NULL, 
`geolocation_name` varchar(200) NOT NULL, 
`geolocation_parent` varchar(20) DEFAULT NULL, 
`geolocation_child` varchar(1) NOT NULL, 
PRIMARY KEY (`geolocation_id`,`geolocation_company_id`), 
KEY `com_id_dem_com_id_fk` (`geolocation_company_id`), 
CONSTRAINT `com_id_dem_com_id_fk` FOREIGN KEY (`geolocation_company_id`) REFERENCES `companies` (`company_id`) ON DELETE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

如果我使用的下一个FK,在工作台上FK犯规秀(它显示了一个结果:

 10:18:43 ALTER TABLE `geolocation` ADD FOREIGN KEY (`geolocation_parent`, `geolocation_company_id`) REFERENCES `geolocation` (`geolocation_id`, `geolocation_company_id`) 0 row(s) affected Records: 0 Duplicates: 0 Warnings: 0 0.136 sec 

ALTER TABLE `geolocation` 
ADD FOREIGN KEY (`geolocation_parent`, `geolocation_company_id`) 
REFERENCES `geolocation` (`geolocation_id`, `geolocation_company_id`); 

如果我改变这个FK:

ALTER TABLE `geolocation` 
ADD FOREIGN KEY (`geolocation_parent`) 
REFERENCES `geolocation` (`geolocation_id`); 

一切都很好,但我需要复合fk。

在此先感谢。

问候, 丹尼尔

+0

可以为您发布两个表 –

+0

的表结构我猜键应该具有相同的名称 –

+0

我编辑的问题。提前致谢。 – user1020015

回答

0

的问题是不是与MySQL是与MySQL工作台。工作台不会显示fk,但它存在。 我试过蟾蜍,它显示它。此外,我使用“SHOW CREATE TABLE tbl_name”并显示所需的输出。

谢谢大家的帮助。

问候, 丹尼尔