MySQL错误#1005(代码150)
我已尝试创建此表,但在FKs中我尝试的都不起作用MySQL错误#1005(代码150),mysql,mysql-error-1005,Mysql,Mysql Error 1005,我已尝试创建此表,但在FKs中我尝试的都不起作用 CREATE TABLE `tb_AutSituacao` ( `id` int(11) NOT NULL AUTO_INCREMENT, `Nome` varchar(50) CHARACTER SET latin1 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 CREATE TABLE `tb_AutHistoric
CREATE TABLE `tb_AutSituacao` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Nome` varchar(50) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
CREATE TABLE `tb_AutHistorico` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Situacao` int(11) NOT NULL,
`Data` date NOT NULL,
`Agente` int(11) NOT NULL,
`Proposta` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `AutHistorico_Situacao` (`Situacao`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
ALTER TABLE `tb_AutHistorico` ADD FOREIGN KEY ( `Situacao` ) REFERENCES `sicor`.`tb_AutSituacao` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
我总是得到“#1005-无法创建表'tablename'(错误号:150)”。谢谢你的帮助
$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
修复您的
外键定义。外键约束定义存在问题(请参阅-最后一段以了解调试)
发生此错误时,要么定义本身不正确(语法错误),要么引用的内容有问题。您的语法是正确的,what is references是正确的,所以它很可能是schema引用
我可以很好地运行这些语句,但我必须在create表名前面加上模式名。否则,MySQL将假定您正在尝试为当前使用的数据库创建表。请参阅以下经修改的声明:
CREATE TABLE `sicor`.`tb_AutSituacao` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Nome` varchar(50) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
CREATE TABLE `sicor`.`tb_AutHistorico` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Situacao` int(11) NOT NULL,
`Data` date NOT NULL,
`Agente` int(11) NOT NULL,
`Proposta` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `AutHistorico_Situacao` (`Situacao`),
CONSTRAINT `FK_Situacao` FOREIGN KEY (`Situacao`) REFERENCES `sicor`.`tb_AutSituacao` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
另外,请注意,创建表后不必定义约束,而是可以将其包含在创建定义中,如上图所示。是否sicor
是有效的架构名称?你有:“REFERENCESsicor
tb\u AutSituacao
(id
)”也许如果你删除sicor
前缀并改为“REFERENCEStb\u AutSituacao
”,是的,但我会尝试一下。更新:使用或不使用架构名称时出现相同错误。当我添加分号并删除sicor.
。不确定是否相关,但您使用的是什么版本的MySQL?@Wiseguy MySQL 5.5.16。删除分号是什么意思?我只是在CREATE语句的末尾添加了分号,这样它就可以在SQLFIDLE上运行(在我之前的评论中链接)。就这样。我复制了您的查询,在每个CREATE语句后添加了分号,并删除了sicor.
。