我有这张桌子:
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';
我收到错误
我仔细检查了外键,没有发现错误。 它已经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'
这是怎么发生的?
答案 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给出了同样的错误消息。