MySQL error #1005 (Code 150)

老子叫甜甜 提交于 2019-12-01 13:47:33

问题


I have tried create this table, but nothing I have tried works from 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_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;

I always get "#1005 - Can't create table 'tablename' (errno: 150)". Thanks for help.


回答1:


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

Fix your FOREIGN KEY definition.




回答2:


There is an issue with your foreign key constraint definition (See http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html - last paragraph for debugging)

When this error occurs, either the definition itself is incorrect (syntax error) OR there is an issue with what is being referenced. Your syntax is correct, what is references is correct, so it's most likely the schema reference.

I can run the statements fine on my end, but I had to prefix the create table names with the schema name. Otherwise, MySQL will assume that you are trying to create the table for the database you are currently using. Please see following modified statements:

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;

Also please note that you do not have to define a constraint after creating the table, instead you can include it in the create definition as shown above.



来源:https://stackoverflow.com/questions/11125801/mysql-error-1005-code-150

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!