使用InnoDB引擎创建表时出现Mysql 1005错误

时间:2010-11-18 08:49:07

标签: mysql innodb mysql-error-1005

当我尝试使用以下定义创建表时

CREATE TABLE `demo` (
    `id` INT(11) NOT NULL auto_increment,
    `x_id` INT(11) NOT NULL,
    `y_id` INT(11) NOT NULL,
    `z_id` INT(11) NOT NULL,
    `status` TINYINT unsigned NOT NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY  (`id`),
    CONSTRAINT UNIQUE INDEX(x_id, y_id)
) ENGINE=InnoDB;

发生OperationalError

_mysql_exceptions.OperationalError: 
(1005, "Can't create table 'xxx.frm' (errno: -1)")

如果我删除尾随的ENGINE=InnoDB

,它会有效

有人知道这背后的原因吗?

修改

MySQL版本是 mysql Ver 14.12 Distrib 5.0.84, for pc-linux-gnu (i686) using readline 5.2

2 个答案:

答案 0 :(得分:3)

  

如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义。它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述。如果不满足,则MySQL返回错误号1005并在错误消息中引用错误150.

     

如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用错误150,则表创建失败,因为未正确形成外键约束。类似地,如果ALTER TABLE失败并且它引用错误150,则意味着对于更改的表将错误地形成外键定义。您可以使用 SHOW ENGINE INNODB STATUS 显示服务器中最新的InnoDB外键错误的详细说明。

Foreign Key Constraints - Error 1005

答案 1 :(得分:0)

CREATE TABLE  `demo` (
  `id` int(11) NOT NULL auto_increment,
  `x_id` int(11) NOT NULL,
  `y_id` int(11) NOT NULL,
  `z_id` int(11) NOT NULL,
  `status` tinyint(3) unsigned NOT NULL,
  `created_at` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `x_id` (`x_id`,`y_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

你能试试吗?