0

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

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

エラークエリSQL:

ALTER TABLE sedi_i18nADD CONSTRAINT sedi_i18n_FK_1FOREIGN KEY( id)REFERENCES sediid)ON DELETE CASCADE、ADD CONSTRAINT sedi_i18n_FK_2FOREIGN KEY( culture)REFERENCES culturecode)、ADD CONSTRAINT sedi_i18n_FK_3FOREIGN KEY( nation)REFERENCES nationsiso_code_2);

Messaggio di MySQL:

1005-テーブルを作成できません'test_javier_4。#sql-528_aed'(errno:150)

何か案が?

よろしく

ジャビ

4

2 に答える 2

1

問題は、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`);
于 2010-11-17T14:04:45.557 に答える
0

MySQLドキュメントから:

1005(ER_CANT_CREATE_TABLE)

テーブルを作成できません。エラーメッセージがエラー150を参照している場合、外部キー制約が正しく形成されていないため、テーブルの作成に失敗しました。

3つの外部キー制約の追加のうち、一度に1つずつ実行することで、エラーの原因となっているものを特定できますか?好き:

ALTER TABLE `sedi_i18n`
  ADD CONSTRAINT `sedi_i18n_FK_1` FOREIGN KEY (`id`) REFERENCES `sedi` (`id`) ON DELETE CASCADE
于 2010-11-17T13:09:41.480 に答える