Используйте кортеж в качестве внешнего ключа - PullRequest
0 голосов
/ 04 июня 2019

Допустим, у меня есть таблица с именем заимствований, подобная этой:

CREATE TABLE IF NOT EXISTS `borrows` 
( `memberID` int(11) NOT NULL ,
 `ISBN` int(11) NOT NULL ,
 `CopyNr` int(11) NOT NULL ,
  `date_of_borrowing` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `date_of_reminder` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`memberID`,`ISBN`,`CopyNr`,`date_of_borrowing`) )
 ENGINE=InnoDB DEFAULT CHARSET=latin1

Я хочу, чтобы эта таблица имела (ISBN, CopyNr) в качестве внешнего ключа для другой таблицы с именем копии.это:

ALTER TABLE `borrows` ADD FOREIGN KEY (`ISBN`,`copyNr`) 
REFERENCES `copies`(`copyNr`) ON DELETE RESTRICT ON UPDATE RESTRICT;

Это, однако, дает мне эту ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(`ISBN`),(`copyNr`)) REFERENCES `copies`(`copyNr`) ON DELETE RESTRICT ON UPDATE ' at line 1

Должен ли я сначала создать другой столбец, который будет содержать кортежи (ISBN, CopyNr)? Если да, как это можнослучиться? Если нет, как я могу решить эту проблему?

ОБНОВЛЕНИЕ: Это код для копий:

CREATE TABLE IF NOT EXISTS `copies` 
( `copyNr` int(11) NOT NULL AUTO_INCREMENT,
 `shelf` text NOT NULL,
 `ISBN` int(11) NOT NULL,
 PRIMARY KEY (`copyNr`,`ISBN`) )
 ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1

1 Ответ

1 голос
/ 04 июня 2019
ALTER TABLE `borrows` ADD FOREIGN KEY (`ISBN`,`copyNr`) 
REFERENCES `copies`(`ISBN`,`copyNr`) ON DELETE RESTRICT ON UPDATE RESTRICT;

У вас должен быть составной индекс (ISBN, copyNr) для копий таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...