MySQL Простая проблема с зарубежными ключами
-
26-09-2019 - |
Вопрос
У меня есть две столы:
Таблица Автор: ID (Integer), author_name (varchar), first_name (varchar), last_name (varchar), предпочтение_name (varchar).
Таблица Coatored: ID (Integer) ATER1ID (Integer), author2ID (целое число), paper_id (integer) (идентификатор соавторской бумаги, на который ссылается на эту ссылку)
Я хочу добавить ограничения ключей иностранных ключей, такие, что author1id и author2id в полагаемости относятся к идентификатору в авторе. Я определил таблицы как таковые:
CREATE TABLE Author(ID INT, author_name VARCHAR(100), preferred_name VARCHAR(100), first_name VARCHAR(100), last_name VARCHAR(100), PRIMARY KEY(ID)) ENGINE=INNODB;
CREATE TABLE CoAuthored(ID INT, author1ID INT, author2ID INT, paper_ID INT);
Это моя попытка создания внешнего ключа:
ALTER TABLE CoAuthored ADD foreign key (author1ID) references Author(ID) on delete cascade on update cascade;
Это выполняет просто хорошо, но когда я пытаюсь добавить кортелю AA, который содержит автора1ID, который не существует в ID, это позволяет мне сделать это, то есть ограничение внешнего ключа не работает.
Что мне нужно сделать по-другому? Я пытался сделать обе таблицы Engine = InnoDB в разделе «Создание операторов», но тогда я получил ошибку 1005 не могу создать таблицу.
Решение
от: https://web.archive.org/web/1/http://articles.techrepublic%2eCom%2eCom/5100-10878_11-6035435.html.
Для того, чтобы настроить внешний ключевые отношения между двумя таблицами MySQL, необходимо выполнить три условия:
Обе таблицы должны быть из типа таблицы InnoDB.
Поля, используемые в отношениях внешних ключей, должны быть проиндексированы.
Поля, используемые в отношениях внешних ключей, должны быть похожи в типе данных.
Важно: для таблиц Nin-innoDB, пункт иностранного ключа игнорируется.
Другие советы
Можете ли вы попробовать «Engine = InnoDB»
Зарубежные ключевые ограничения / ключевые ограничения работают только с таблицами InnoDB :)
--Ваше здоровье
Прежде всего: вам нужно определить все таблицы, связанные с иностранными ключами, чтобы быть InnoDB. MyISAM просто не поддерживает иностранные ключи.
Ваша проблема здесь (ошибка 1005) немного запутана. Если вы сделаете ALTER TABLE
, Это означает, что в одном из зарубежных ключевых месторождений есть значение, не имеет ссылки в другой таблице.
При создании таблиц убедитесь, что вы создаете таблицу «Родитель» сначала, затем вторая и третья таблица.