我想建设一个表,个中主键引用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;
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|