创建表上的MySql错误

前端之家收集整理的这篇文章主要介绍了创建表上的MySql错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想创建一个表,其中主键引用MySql上其他表的两列
像这样的东西

CREATE  TABLE IF NOT EXISTS `tarina`.`Geo_Distrito` (
  `departamento` INT(10) NOT NULL,`provincia` INT(10) NOT NULL,`codigo` INT(10) NOT NULL,`nombre` VARCHAR(80) NULL,`estado` INT(10) NULL,PRIMARY KEY (`departamento`,`provincia`,`codigo`),CONSTRAINT `FK_ProvinciaDistrito`  FOREIGN KEY (`departamento`,`provincia` )  REFERENCES `Geo_Provincia` (`departamento`,`codigo` )
)ENGINE = InnoDB;

并得到这个错误

Can't create table 'tarina.Geo_Distrito' (errno: 150)

谁能告诉我这是什么问题?

最佳答案
无法创建表.如果错误消息引用错误150,则表创建失败,因为未正确形成外键约束.如果错误消息引用错误-1,则表创建可能失败,因为该表包含与内部InnoDB表的名称匹配的列名.

这是因为您的列的定义必须相同.在你的情况下:

列不是同一类型,codigo int(10)unsigned NOT NULL和codigo INT(10)NOT NULL,

此外,您使用的FK provincia也与codigo不同.

这是脚本:

DROP TABLE IF EXISTS `Geo_Distrito`;
DROP TABLE IF EXISTS `Geo_Provincia`;
DROP TABLE IF EXISTS `Geo_Departamento`;

CREATE TABLE `Geo_Departamento` (
`codigo` int(10) unsigned NOT NULL COMMENT 'Codigo autogenerado',`nombre` varchar(80) NOT NULL COMMENT 'Nombre del departamento',`estado` int(10) unsigned NOT NULL COMMENT 'Estado de departamento',PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Tabla de Departamentos';


CREATE TABLE `Geo_Provincia` (
`codigo` int(10) unsigned NOT NULL COMMENT 'Codigo autogenerado',`departamento` int(10) unsigned NOT NULL,`nombre` varchar(45) NOT NULL,`estado` int(10) unsigned NOT NULL,`codigo`) USING BTREE,CONSTRAINT `FK_ProvinciaDepartamento` FOREIGN KEY (`departamento`) REFERENCES `Geo_Departamento` (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Tabla de provincias del sistema.';

CREATE  TABLE IF NOT EXISTS `Geo_Distrito` (
`departamento` int(10) unsigned NOT NULL,`provincia` int(10) unsigned NOT NULL,`codigo` int(10) unsigned NOT NULL COMMENT 'Codigo autogenerado',`codigo` )
)ENGINE = InnoDB;
原文链接:https://www.f2er.com/mysql/433404.html

猜你在找的MySQL相关文章