Вопрос

У меня есть две столы:

Таблица Автор: 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, необходимо выполнить три условия:

  1. Обе таблицы должны быть из типа таблицы InnoDB.

  2. Поля, используемые в отношениях внешних ключей, должны быть проиндексированы.

  3. Поля, используемые в отношениях внешних ключей, должны быть похожи в типе данных.

Важно: для таблиц Nin-innoDB, пункт иностранного ключа игнорируется.

Другие советы

Можете ли вы попробовать «Engine = InnoDB»

Зарубежные ключевые ограничения / ключевые ограничения работают только с таблицами InnoDB :)

--Ваше здоровье

Прежде всего: вам нужно определить все таблицы, связанные с иностранными ключами, чтобы быть InnoDB. MyISAM просто не поддерживает иностранные ключи.

Ваша проблема здесь (ошибка 1005) немного запутана. Если вы сделаете ALTER TABLE, Это означает, что в одном из зарубежных ключевых месторождений есть значение, не имеет ссылки в другой таблице.

При создании таблиц убедитесь, что вы создаете таблицу «Родитель» сначала, затем вторая и третья таблица.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top