2

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

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

4

2 回答 2

3

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

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

外键约束 - 错误 1005

于 2010-11-18T09:49:26.913 回答
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;
于 2010-11-18T09:00:20.570 回答