простая проблема с внешними ключами - PullRequest
0 голосов
/ 26 октября 2010

У меня есть две таблицы:

Автор таблицы: ID (INTEGER), имя_пользователя (VARCHAR), имя_папки (VARCHAR), имя_папки (VARCHAR), предпочтительное_имя (VARCHAR).

Таблица CoAuthored: ID (INTEGER) author1ID (INTEGER), author2ID (INTEGER), paper_ID (INTEGER) (идентификатор статьи в соавторстве, на которую ссылается эта ссылка)

Я хочу добавить ограничения внешнего ключа, такие как author1ID и author2IDв соавторстве обратитесь к ID в авторе.Я определил таблицы следующим образом:

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;

Это выполняется просто отлично, но когда я пытаюсь добавить кортеж, который содержитauthor1ID, который не существует в ID, он позволяет мне это делать, то есть ограничение внешнего ключа не работает.

Что мне нужно сделать по-другому?Я попытался сделать обе таблицы ENGINE = INNODB в операторах create, но затем я получил бы ОШИБКУ 1005. Невозможно создать таблицу.

Ответы [ 3 ]

0 голосов
/ 26 октября 2010

Можете ли вы попробовать 'ENGINE = InnoDB'

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

- Cheers

0 голосов
/ 26 октября 2010

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

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

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

0 голосов
/ 26 октября 2010

с: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6035435.html

Чтобы установить отношение внешнего ключа между двумя таблицами MySQL, должны быть выполнены три условия:

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

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

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

Внимание! Для таблиц, не относящихся к InnoDB, предложение FOREIGN KEY игнорируется.

...