2012-02-07 2 views
5

Я хочу, чтобы создать таблицу с первичным ключом, на который ссылается на двух столбцах другой таблицы на 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) 

Может кто-нибудь скажет мне, в чем проблема?

+0

база данных 'tarina' создается? –

+0

Да, я создал много таблиц с одним и тем же пользователем – jcvegan

+0

Да, он создан – jcvegan

ответ

10

Невозможно создать таблицу. Если сообщение об ошибке относится к ошибке 150, создание таблицы завершилось неудачно, потому что ограничение внешнего ключа было неправильно сформировано. Если сообщение об ошибке относится к ошибке -1, создание таблицы, вероятно, не удалось, потому что таблица содержит имя столбца, совпадающее с именем внутренней таблицы InnoDB.

Это должно из-за определение вашей колонки должно быть таким же. В вашем случае:

столбцы не тот же самый тип, codigo int(10) unsigned NOT NULL and 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, 
PRIMARY KEY (`departamento`,`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', 
`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; 
+0

Работает отлично! Спасибо – jcvegan

+0

Добро пожаловать! –

Смежные вопросы