#1005 - 无法创建表格'' (错误:150)

时间:2014-01-20 08:31:58

标签: mysql

我有这张桌子:

CREATE TABLE `api_user` (
  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'User id',
  `firstname` varchar(32) DEFAULT NULL COMMENT 'First name',
  `lastname` varchar(32) DEFAULT NULL COMMENT 'Last name',
  `email` varchar(128) DEFAULT NULL COMMENT 'Email',
  `username` varchar(40) DEFAULT NULL COMMENT 'Nickname',
  `api_key` varchar(40) DEFAULT NULL COMMENT 'Api key',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'User record create date',
  `modified` timestamp NULL DEFAULT NULL COMMENT 'User record modify date',
  `lognum` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Quantity of log ins',
  `reload_acl_flag` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Refresh ACL flag',
  `is_active` smallint(6) NOT NULL DEFAULT '1' COMMENT 'Account status',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Api Users';

然后我需要有 api session 表并以这种方式创建表:

CREATE TABLE `api_session` (
  `user_id` int(10) unsigned NOT NULL COMMENT 'User id',
  `logdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Login date',
  `sessid` varchar(40) DEFAULT NULL COMMENT 'Sessioin id',
  KEY `IDX_API_SESSION_USER_ID` (`user_id`),
  KEY `IDX_API_SESSION_SESSID` (`sessid`),
  CONSTRAINT `FK_API_SESSION_USER_ID_API_USER_USER_ID` FOREIGN KEY (`user_id`) REFERENCES `api_user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Api Sessions';

我收到错误

1005 - 无法创建表'api_session'(错误号:150)

我仔细检查了外键,没有发现错误。 它已经5个小时了,我无法弄明白。

提前致谢。

更新

当老板(https://stackoverflow.com/users/13508/lvaro-g-vicario)告诉我运行这个

SHOW ENGINE innodb STATUS

我明白了

LATEST FOREIGN KEY ERROR
------------------------
140120 16:08:47 Error in foreign key constraint of table api_session:
FOREIGN KEY (`user_id`) REFERENCES `api_user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Api Sessions':
Cannot resolve table name close to:
(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Api Sessions'

这是怎么发生的?

2 个答案:

答案 0 :(得分:0)

如果您发出以下查询,则可以找到实际错误消息:

SHOW ENGINE innodb STATUS

重现这一点的唯一方法:

Cannot resolve table name close to:
 (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Api Sessions'

...根本没有api_user表。

我怀疑你是在另一个数据库上发出第二个查询。

答案 1 :(得分:0)

为了帮助将来某些人找到这个问题页面:

当问题是外键引用表没有使用InnoDB引擎而MyISAM时,mysql给出了同样的错误消息。