[英]#1005 - Can't create table '' (errno: 150)
我有这张桌子:
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会话表并以这种方式创建表:
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';
我得到错误
我仔细检查了外键,没有发现错误。 已经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'
这是怎么发生的?
如果发出以下查询,则可以找到实际的错误消息:
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
表。
我怀疑您是在另一个数据库上发出第二个查询。
只是为了帮助将来的人们找到此问题页面:
当问题是外键引用表不是使用InnoDB引擎而是MyISAM时,mysql会给出非常相同的错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.