2016-07-12 7 views
0

У меня есть две таблицы в разных базах данных в mysql. Я пытаюсь создать составной внешний ключ из одной таблицы в другую, и по какой-то причине он не работает. Он работает только в том случае, если я использую одно первичное ключевое поле вместо составного ключа.Невозможно создать внешний ключ для разных баз данных в mysql

Проблемное ограничение в приведенном ниже примере: fk_dummy_table11. При выполнении инструкции я получаю Error Code: 1215. Cannot add foreign key constraint.

Создать таблицу заявление для "манекена" в БД NREAP:

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; 

Создать таблицу заявление для "table1" в БД TRANS:

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 Version 5.6.24. Workbench версии 6.3 ... http://i.imgur.com/nLkTBEW.jpg ... так что, возможно, это ваша версия. ИДК. – 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

я в конце концов понял, проблема.

Я сузил его до проблемы с использованием ключей VARCHAR, сдержанность отлично работала с другими типами данных. После нескольких экспериментов я добавил определенную кодировку для каждой схемы, и она сработала. Добавление конкретной кодировки к каждой таблице также работает.

Спасибо за помощь!

 Смежные вопросы

  • Нет связанных вопросов^_^