2016-07-12 85 views
0

我在mysql的不同數據庫中有兩個表。我試圖從一個表創建一個複合外鍵到另一個,由於某種原因它不起作用。 它只適用於我使用單個主鍵字段而不是複合鍵無法在mysql中爲不同的數據庫創建外鍵

以下示例中的問題約束是fk_dummy_table11。執行語句時,我得到了Error Code: 1215. Cannot add foreign key constraint

在DB NREAP 「啞」 CREATE 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 「表1」 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版本,這是最新的一個,我認爲。

我已經跑了InnoDB的狀態:

------------------------ 
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。工作臺版本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 – zod

+0

如果你有PROCESS權限,你可能會在用命令'SHOW ENGINE INNODB STATUS'創建外鍵失敗後看到確切的錯誤信息。 –

回答

0

我終於想通了這個問題。

我已經把它縮小到使用VARCHAR鍵的問題,剋制與其他數據類型很好地工作。經過幾次實驗後,我爲每個模式添加了一個特定的字符集,並且工作正常。將特定的字符集添加到每個表也是可行的。

感謝您的幫助!