У меня есть две таблицы в разных базах данных в 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.
Я просто получил это для работы. Точно так же, как у вас есть. Mysql Version 5.6.24. Workbench версии 6.3 ... http://i.imgur.com/nLkTBEW.jpg ... так что, возможно, это ваша версия. ИДК. – 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' –