0

我试过创建这个表,但我没有尝试过 FK 的作品。

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' (errno: 150)”。感谢帮助。

4

2 回答 2

1
$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

修正你的FOREIGN KEY定义。

于 2012-06-20T18:28:40.887 回答
1

您的外键约束定义存在问题(请参阅http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html - 调试的最后一段)

发生此错误时,定义本身不正确(语法错误)或引用的内容存在问题。你的语法是正确的,什么是引用是正确的,所以它很可能是架构引用。

我可以很好地运行这些语句,但我必须在创建表名前加上模式名称。否则,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;

另请注意,您不必在创建表后定义约束,而是可以将其包含在创建定义中,如上所示。

于 2017-01-17T19:09:00.857 回答