1005 mysql无法创建表外键errno 150

时间:2012-08-23 20:55:46

标签: mysql magento create-table

我正在尝试基于Magento数据库结构创建一个表。我在安装过程中一直收到错误,因此我尝试创建与该问题相关的三个表。 OAuth安装时出现错误。新版本的Magento将该过程分为MySQL中的3个表。因此,已经创建了三个表中的两个,这是第三个表的MySQL脚本 - 这是运行错误的表。

DROP TABLE IF EXISTS `oauth_token`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `oauth_token` (
`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entity ID',
`consumer_id` int(10) unsigned NOT NULL COMMENT 'Consumer ID',
`admin_id` int(10) unsigned DEFAULT NULL COMMENT 'Admin user ID',
`customer_id` int(10) unsigned DEFAULT NULL COMMENT 'Customer user ID',
`type` varchar(16) NOT NULL COMMENT 'Token Type',
`token` varchar(32) NOT NULL COMMENT 'Token',
`secret` varchar(32) NOT NULL COMMENT 'Token Secret',
`verifier` varchar(32) DEFAULT NULL COMMENT 'Token Verifier',
`callback_url` varchar(255) NOT NULL COMMENT 'Token Callback URL',
`revoked` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Is Token revoked',
`authorized` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Is Token authorized',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Token creation         timestamp',
PRIMARY KEY (`entity_id`),
UNIQUE KEY `UNQ_OAUTH_TOKEN_TOKEN` (`token`),
KEY `IDX_OAUTH_TOKEN_CONSUMER_ID` (`consumer_id`),
KEY `FK_OAUTH_TOKEN_ADMIN_ID_ADMIN_USER_USER_ID` (`admin_id`),
KEY `FK_OAUTH_TOKEN_CUSTOMER_ID_CUSTOMER_ENTITY_ENTITY_ID` (`customer_id`),
CONSTRAINT `FK_OAUTH_TOKEN_ADMIN_ID_ADMIN_USER_USER_ID` FOREIGN KEY (`admin_id`)         REFERENCES `admin_user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_OAUTH_TOKEN_CONSUMER_ID_OAUTH_CONSUMER_ENTITY_ID` FOREIGN KEY     (`consumer_id`) REFERENCES `oauth_consumer` (`entity_id`) ON DELETE CASCADE ON UPDATE     CASCADE,
CONSTRAINT `FK_OAUTH_TOKEN_CUSTOMER_ID_CUSTOMER_ENTITY_ENTITY_ID` FOREIGN KEY (`customer_id`) REFERENCES `customer_entity` (`entity_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='OAuth Tokens';
/*!40101 SET character_set_client = @saved_cs_client */;

那么我应该怎么做或者如何改变MySQL脚本才能工作?

1 个答案:

答案 0 :(得分:2)

最常见的是因为您引用的表是MyISAM,您不能在FK关系中使用它们。

也可能是你的FK没有唯一的名字,但鉴于你的命名惯例,这看起来不太可能。

如果两者都没有,请检查您引用的列,并确保它们有一个索引,主键或唯一。

最后检查您的数据类型,FK关系中两列之间的数据必须完全相同。即使是不同的长度(int(10),int(11)),或者signed vs unsigned也不允许你建立FK关系。