質問

私はこの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`);

しかし、私はこのエラーをのgettinています:

  

ErroreクエリSQLます:

     

ALTER TABLEのsedi_i18nのADD   CONSTRAINT sedi_i18n_FK_1 FOREIGN   KEY(id)REFERENCESのsedi(   DELETE CASCADE ON id)、ADD   CONSTRAINT sedi_i18n_FK_2 FOREIGN   KEY(culture)REFERENCES   culturecode)、ADDのCONSTRAINT   sedi_i18n_FK_3 FOREIGN KEY(   nation)REFERENCESのnations(   iso_code_2);

     

MessaggioディのMySQLます:

     

1005 - テーブルを作成することはできません(エラー番号:150) 'をtest_javier_4#SQL-528_aed。'

任意のアイデア?

よろしく

ハビ

役に立ちましたか?

解決

問題は、あなたの3つの外部キーの2はどちらも主キーではないも、彼らはそれらに一意のインデックスを持っている親テーブルの列を参照することです。

すべての外部キー列は主キーまたは親テーブルの一意のキーのいずれかを参照する必要があります。

これらの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をエラーに参照している場合、外部キー制約が正しく形成されていなかったため、テーブルの作成に失敗しました。

あなたがそれらを一つずつ実行して、エラーの原因となっている3つの外部キー制約の追加のどの分離することはできますか?同様ます:

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