当我尝试使用以下定义创建表时
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
答案 0 :(得分:3)
如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义。它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述。如果不满足,则MySQL返回错误号1005并在错误消息中引用错误150.
如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用错误150,则表创建失败,因为未正确形成外键约束。类似地,如果ALTER TABLE失败并且它引用错误150,则意味着对于更改的表将错误地形成外键定义。您可以使用 SHOW ENGINE INNODB STATUS 显示服务器中最新的InnoDB外键错误的详细说明。
答案 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;
你能试试吗?