我有此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)参考   culturecode),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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top