题
我有此SQL子句:
CREATE TABLE IF NOT EXISTS `culture` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` char(6) NOT NULL DEFAULT 'it',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
CREATE TABLE IF NOT EXISTS `nations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`culture_id` int(11) NOT NULL,
`iso_code_2` char(2) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `nations_FI_1` (`culture_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=245 ;
CREATE TABLE IF NOT EXISTS `sedi` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
CREATE TABLE IF NOT EXISTS `sedi_i18n` (
`id` int(11) NOT NULL,
`culture` char(6) NOT NULL,
`nation` char(2) NOT NULL,
`indirizzo` text NOT NULL,
PRIMARY KEY (`id`,`culture`),
KEY `sedi_i18n_FI_2` (`culture`),
KEY `sedi_i18n_FI_3` (`nation`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `sedi_i18n`
ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `sedi_i18n_FK_2` FOREIGN KEY (`culture`) REFERENCES `culture` (`code`),
ADD CONSTRAINT `sedi_i18n_FK_3` FOREIGN KEY (`nation`) REFERENCES `nations` (`iso_code_2`);
但是我刚开此错误:
Errore查询SQL:
ALTER TABLE
sedi_i18n
ADD 约束sedi_i18n_FK_1
FOREIGN KEY(id
)参考sedi
(id
)ON DELETE CASCADE,ADD 约束sedi_i18n_FK_2
FOREIGN KEY(culture
)参考culture
(code
),ADD约束sedi_i18n_FK_3
外键(nation
)参考nations
(iso_code_2
);Messaggio二MySQL的:
1005 - 无法创建表(错误:150) 'test_javier_4#SQL-528_aed。'
任何想法?
此致
哈维
解决方案
的问题是,你的3个外键的2指在父表既不是主键也不具有唯一的索引对它们的列。
所有外键列必须引用任一主键或父表的唯一密钥。
这是两个坏外键:
ADD CONSTRAINT `sedi_i18n_FK_2` FOREIGN KEY (`culture`) REFERENCES `culture` (`code`),
ADD CONSTRAINT `sedi_i18n_FK_3` FOREIGN KEY (`nation`) REFERENCES `nations` (`iso_code_2`);
如果这些列的含义是在父表中唯一的,那么你可以通过增加对他们的唯一索引是这样解决的:
alter table `culture`
add unique key (`code`);
alter table `nations`
add unique key (`iso_code_2`);
其他提示
从 MySQL的文档:
1005(ER_CANT_CREATE_TABLE)
无法创建表。如果错误消息是指错误150,表创建失败,因为外键约束未被正确形成。
您可以区分出三个外键约束增加的原因造成的错误,通过运行它们一次一个?像:
ALTER TABLE `sedi_i18n`
ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE
不隶属于 StackOverflow