次のステートメントの何が問題になっていますか?
ALTER TABLE submittedForecast
ADD CONSTRAINT FOREIGN KEY (data) REFERENCES blobs (id);
私が得ているエラーメッセージは
Can't create table `fcdemo`.`#sql-664_b` (errno: 150 "Foreign key constraint is incorrectly formed")
これは私にとってMariaDB 10.1.8で機能します。
CREATE TABLE `submittedforecast` (
`id` INT(11) NOT NULL,
`data` INT(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX `data` (`data`)
) ENGINE=InnoDB;
CREATE TABLE `blobs` (
`id` INT(11) NOT NULL,
`content` BLOB NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
ALTER TABLE submittedForecast
ADD CONSTRAINT FOREIGN KEY (data) REFERENCES blobs (id);
MariaDBのバージョン番号と、submittedForecast
およびblobs
のCREATE TABLE
ステートメントを含む完全な例を提供できますか?
これをすでに解決したかどうかはわかりませんが、エンジンと照合順序の両方がテーブル間で一致していることを確認してください(例:latin1からlatin1およびInnoDBからInnoDB)。
私は同じ問題を抱えていたので、これらを切り替えることでうまく動作しました。
同じ問題が発生し、テーブル構造を調べたところ、子テーブルの外部キー句が親テーブルの主キーを参照していないことがわかりました。親テーブルの主キーを参照するように変更すると、エラーは発生しなくなりました。
私は同じエラーがあり、実際にはかなり簡単に解決できます、あなたは制約に名前を付けています、これはこのようなことをするべきです:
ALTER TABLE submittedForecast ADD CONSTRAINT `fk_submittedForecast`
FOREIGN KEY (data) REFERENCES blobs (id)
さらにまとまりが必要な場合は、クエリの最後に追加します
ON DELETE CASCADE ON UPDATE RESTRICT
これは別のフィールドのエラーである可能性もあるため、テーブルキーと外部キーが同じタイプであり、同じ属性を持っているかどうかを確認してください。