ИНОСТРАННЫЙ КЛЮЧ (`shifttid`,` groupid`, `sectionid`) ССЫЛКИ` tbl_academic` (`id`,` id`, `id`) не работает в базе данных mysql - PullRequest
0 голосов
/ 29 мая 2020
ALTER TABLE `tbl_acc_payable` ADD CONSTRAINT `FK_APAY_SGS` FOREIGN KEY (`shiftid`, `groupid`, `sectionid`) REFERENCES `tbl_academic`(`id`, `id`, `id`) ON DELETE SET NULL ON UPDATE CASCADE

почему я не могу применить несколько столбцов ссылки на другую таблицу несколько столбцов в базе данных MySQL?

вернуть сообщение об ошибке:

# 1005 - Невозможно создать таблицу fastpay. tbl_acc_payable (errno: 150 «Ограничение внешнего ключа неправильно сформировано») (Подробности…)

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Составной внешний ключ должен ссылаться на составной первичный ключ. Поскольку вы не можете создать первичный ключ в столбце Triple ID , вам следует создать 3 внешних ключа, каждый из которых ссылается на один и тот же первичный ключ (в столбце tbl_academi c .id).

0 голосов
/ 29 мая 2020

Ссылки FK использовали все значение выражения или его префикс. Значение, а не имя столбца.

Вам необходимо указать значения в 3 разных строках, которые не могут быть предоставлены составным индексом. Итак, создайте 3 отдельных внешних ключа, относящихся к одному индексу tbl_academic(id):

ALTER TABLE tbl_acc_payable 
ADD CONSTRAINT FK_APAY_SGS_1
  FOREIGN KEY (shiftid) 
  REFERENCES tbl_academic(id) 
  ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT FK_APAY_SGS_2 
  FOREIGN KEY (groupid) 
  REFERENCES tbl_academic(id) 
  ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT FK_APAY_SGS_3 
  FOREIGN KEY (sectionid) 
  REFERENCES tbl_academic(id) 
  ON DELETE SET NULL ON UPDATE CASCADE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...