mysqlの異なるデータベースに2つのテーブルがあります。あるテーブルから別のテーブルに複合外部キーを作成しようとしていますが、何らかの理由でそれが機能しません。 複合キーの代わりに単一の主キーフィールドを使用する場合にのみ機能します。mysql内の別のデータベースに外部キーを作成できません
下の例の問題は、fk_dummy_table11
です。文を実行するときにはError Code: 1215. Cannot add foreign key constraint
が得られます。
DB NREAPに "ダミー" のtable文を作成します。
CREATE TABLE IF NOT EXISTS `NREAP`.`dummy` (
`id` INT NOT NULL,
`table1_TDO_COD_TIP_DOC` VARCHAR(14) NOT NULL,
`table1_RFI_NUM_DOC` INT NOT NULL,
`table1_RFI_VER_DOC` INT NOT NULL,
`table1_RFI_NOM_FIC` VARCHAR(128) NOT NULL,
PRIMARY KEY (`id`),
INDEX `fk_dummy_table11_idx` (`table1_TDO_COD_TIP_DOC` ASC, `table1_RFI_NUM_DOC` ASC, `table1_RFI_VER_DOC` ASC, `table1_RFI_NOM_FIC` ASC),
CONSTRAINT `fk_dummy_table11`
FOREIGN KEY (`table1_TDO_COD_TIP_DOC` , `table1_RFI_NUM_DOC` , `table1_RFI_VER_DOC` , `table1_RFI_NOM_FIC`)
REFERENCES `TRANS`.`table1` (`TDO_COD_TIP_DOC` , `RFI_NUM_DOC` , `RFI_VER_DOC` , `RFI_NOM_FIC`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
をDB TRANSにおける "TABLE1" のためのCREATE TABLEステートメント:
CREATE TABLE IF NOT EXISTS `TRANS`.`table1` (
`TDO_COD_TIP_DOC` VARCHAR(14) NOT NULL,
`RFI_NUM_DOC` INT NOT NULL,
`RFI_VER_DOC` INT NOT NULL,
`RFI_NOM_FIC` VARCHAR(128) NOT NULL,
`RFI_LOC_FIC` VARCHAR(1000) NULL,
`RFI_DES_FIC` VARCHAR(255) NULL,
`RFI_TIPO` VARCHAR(100) NOT NULL,
`DAT_ALT` DATE NOT NULL,
`COD_UTI_ALT` VARCHAR(14) NOT NULL,
`DFI_VER_DOC` INT NULL,
`DFI_NUM_SEQ` INT NULL,
`CAM_ANO_INI_CAM` VARCHAR(4) NULL,
PRIMARY KEY (`TDO_COD_TIP_DOC`, `RFI_NUM_DOC`, `RFI_VER_DOC`, `RFI_NOM_FIC`))
ENGINE = InnoDB;
を助けてください、これはとてもイライラさせられます...
EDIT1 - 私は、MySQLのバージョン5.7.12
を実行していますよEDIT2 - 私はSHOW ENGINE INNODB STATUS
コマンドを実行しましたが、それは私に次のような出力が得られます。
私はMySQLバージョン5.7.12を実行している、それは私が考える最新の一つです。私は最終的に問題を考え出した
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-07-13 10:28:34 0x124c Error in foreign key constraint of table nreap/dummy:
FOREIGN KEY (`table1_TDO_COD_TIP_DOC` , `table1_RFI_NUM_DOC` , `table1_RFI_VER_DOC` , `table1_RFI_NOM_FIC`)
REFERENCES `TRANS`.`table1` (`TDO_COD_TIP_DOC` , `RFI_NUM_DOC` , `RFI_VER_DOC` , `RFI_NOM_FIC`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB:
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
私はちょうどそれを働かせました。あなたがそれを持っているのとまったく同じです。 MySQLバージョン5.6.24。 Workbenchバージョン6.3 ... http://i.imgur.com/nLkTBEW.jpg ...多分あなたのバージョンです。 idk。 – Drew
[MySQLを使用して外部キーを持つ複合主キーを参照する方法](http://stackoverflow.com/questions/26891456/how-do-i-reference-a-composite-primary-key-with) -a-foreign-key-using-mysql) – zod
PROCESS権限を持っていれば、 'SHOW ENGINE INNODB STATUS'コマンドで外部キーの作成に失敗した後、正確なエラーメッセージが表示されることがあります。 –