2016-07-12 40 views
0

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. 
+0

私はちょうどそれを働かせました。あなたがそれを持っているのとまったく同じです。 MySQLバージョン5.6.24。 Workbenchバージョン6.3 ... http://i.imgur.com/nLkTBEW.jpg ...多分あなたのバージョンです。 idk。 – Drew

+0

[MySQLを使用して外部キーを持つ複合主キーを参照する方法](http://stackoverflow.com/questions/26891456/how-do-i-reference-a-composite-primary-key-with) -a-foreign-key-using-mysql) – zod

+0

PROCESS権限を持っていれば、 'SHOW ENGINE INNODB STATUS'コマンドで外部キーの作成に失敗した後、正確なエラーメッセージが表示されることがあります。 –

答えて

0

私はInnoDBの状態を走ってきました。

私はVARCHARキーを使用する際に問題を絞り込んだので、他のデータ型でも問題はありませんでした。いくつかの実験の後、私は各スキーマのための特定の文字セットを追加し、それは働いた。特定の文字セットを各テーブルに追加することもできます。

ありがとうございました!

関連する問題