#mysql #sql
#mysql #sql
Вопрос:
Ошибка:
Я пытаюсь создать две таблицы в MySQL, первая таблица содержит два первичных ключа (составных). Во второй таблице их три, два из которых являются внешними ключами, которые ссылаются на два первичных ключа первых таблиц. Итак, теперь я пытаюсь соединить их, что изолирует проблемный код и может быть показано ниже.
Проблема:
MySQL workbench отказывается разрешить мне создать таблицу, которая ссылается на два первичных ключа другой таблицы. Это просто выдает мне код ошибки: 1215. Не удается добавить ограничение внешнего ключа.
Я пытался:
Изменение типов атрибутов с datetime на varchar(). Изменение имен атрибутов. Проверено написание 5 раз. Ссылка только на один ключ работает нормально, но мне нужны оба.
Код проблемы (таблица SQL):
CREATE TABLE IF NOT EXISTS TestInformation2
(
WorkOrder varchar(15),
Date datetime,
TechnicianID smallint,
Primary key (WorkOrder, Date)
) ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS TestBridge2
(
TestBridgeID integer Primary key,
WorkOrder varchar(15),
Date datetime,
Foreign key (WorkOrder) references TestInformation (WorkOrder),
Foreign key (Date) references TestInformation (Date)
) ENGINE = InnoDB;
Результат, который я хочу:
Создайте таблицу ‘TestBridge’, которая имеет два атрибута внешнего ключа: WorkOrder и Date
Ответ №1:
Это должен быть один составной внешний ключ, а не два:
CREATE TABLE `TestBridge2` (
`TestBridgeID` INTEGER NOT NULL,
`WorkOrder` VARCHAR(15),
`Date` DATETIME,
PRIMARY KEY (`TestBridgeID`),
CONSTRAINT FOREIGN KEY (`WorkOrder`, `Date`) REFERENCES `TestInformation2` (`WorkOrder`, `Date`)
)
ENGINE=InnoDB;
Комментарии:
1. Спасибо, это работает, не могли бы вы объяснить, почему это необходимо сделать именно так? Также что делает ОГРАНИЧЕНИЕ в этом примере?
2. FK должен ссылаться на PK, а ваш PK составной, поэтому FK также должен быть составным. Синтаксис зависит от руководства: dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html . Я не вводил команду вручную (так проще допустить опечатку), я создал таблицы с помощью ваших команд, затем использовал свой SQL-клиент (HeidiSQL) для создания FK, а затем скопировал / вставил сюда команду create table с небольшими изменениями.
Ответ №2:
Для этого должен быть создан один внешний ключ, например:
CREATE TABLE IF NOT EXISTS TestBridge2
(
TestBridgeID integer Primary key,
WorkOrder varchar(15),
Date datetime,
Foreign key (WorkOrder, Date) references TestInformation2 (WorkOrder, Date)
) ENGINE = InnoDB;