当我尝试创建具有以下定义的表时,
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;
an OperationalError
occurs:
_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
如果重新创建已删除的表,它必须具有符合引用它的外键约束的定义。如前所述,它必须具有正确的列名称和类型,并且必须在引用的键上具有索引。如果不满足这些条件,MySQL 将返回错误号 1005 并在错误消息中引用错误 150。
如果 MySQL 从 CREATE TABLE 语句报告错误号 1005,并且错误消息引用错误 150,则表创建失败,因为外键约束未正确形成。同样,如果 ALTER TABLE 失败并且引用错误 150,则意味着更改的表的外键定义格式不正确。您可以使用显示引擎 InnoDB 状态显示服务器中最近的 InnoDB 外键错误的详细解释。
外键约束 - 错误 1005 http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)