执行ALTER TABLE时MySQL中的错误1005

时间:2015-07-12 14:00:34

标签: mysql database

这是一个很长的问题,请仔细阅读。我已经列出了我提到的一些链接,但我已经阅读了发布此问题时抛出的所有建议。这不是重复的问题,如https://stackoverflow.com/questions/31341481/unable-to-figure-out-the-cause-for-error-1005-in-mysql-database所示。

我一直在尝试编写一个小型MySQL数据库,其中包含两个表角色,用户定义如下:

作用

CREATE TABLE `role` (
  `roleid` varchar(20) NOT NULL,
  `role_name` varchar(255) NOT NULL,
  `permission` int(11) NOT NULL,
  PRIMARY KEY (`roleid`),
  UNIQUE KEY `roleid` (`roleid`),
  UNIQUE KEY `role_name` (`role_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

用户

CREATE TABLE `user` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `uname` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `rid` varchar(20) NOT NULL,
  UNIQUE KEY `uid` (`uid`),
  UNIQUE KEY `uname` (`uname`),
  UNIQUE KEY `slug` (`slug`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `password` (`password`),
  KEY `rid` (`rid`),
  CONSTRAINT `user_ibfk_1` FOREIGN KEY (`rid`) REFERENCES `role` (`roleid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

现在当我发出ALTER TABLE 'user' DROP FOREIGN KEY;

我收到错误:

ERROR 1005 (HY000): Can't create table 'parth.#sql-418_24' (errno: 150)

parth是数据库的名称。

我咨询了以下讨论:

SHOW ENGINE INNODB STATUS就上述情况提供了以下输出:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
150710 18:20:35 Error in foreign key constraint of table parth/#sql-418_24:
foreign key:
Syntax error close to:

请帮我解决这个问题。感谢。

当我执行ALTER TABLE命令时,表parth /#sql-418_24自动生成。根据参考手册,ALTER TABLE的工作原理是将原始表的内容复制到临时表中,在本例中为#sql-418_24,然后将其重命名为模式中指定的表名。因此,表名中的特殊字符似乎不是问题。请帮忙。

MySql版本5.5.43-0ubuntu0.14.04.1 操作系统Ubuntu 14.04

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

试试这个......

ALTER TABLE `user`  DROP FOREIGN KEY `user_ibfk_1`;

你应该删除约束,这里的约束名为user_ibfk_1