テーブルを変更しようとするエラー150
-
25-09-2019 - |
質問
私はこの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 CONSTRAINTsedi_i18n_FK_1
FOREIGN KEY(id
)REFERENCESのsedi
( DELETE CASCADE ONid
)、ADD CONSTRAINTsedi_i18n_FK_2
FOREIGN KEY(culture
)REFERENCESculture
(code
)、ADDのCONSTRAINTsedi_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`);
他のヒント
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