Внешний ключ не мешает мне вводить данные MySQL - PullRequest
3 голосов
/ 24 февраля 2010

У меня есть таблица, в которой один столбец в качестве внешнего ключа соединяется с другой таблицей. Это вопрос по крикету, где у меня есть стол с именем Fixtures, а другой - Inning.

Таблица Inning имеет столбец FixtureId, относящийся к таблице Fixture.

Я бы ожидал, что если я сделаю вставку в таблицу времени, используя FixtureId, который не относится к Fixture, то это приведет к ошибке, но это не так ...

Кто-нибудь может объяснить, почему это так?

Ответы [ 2 ]

6 голосов
/ 24 февраля 2010

Убедитесь, что вы используете механизм хранения InnoDB при создании таблицы. Другие механизмы хранения будут просто игнорировать ограничения внешнего ключа. ( Источник )

Пример:

CREATE TABLE a (
     id INT AUTO_INCREMENT PRIMARY KEY
) ENGINE=INNODB;

CREATE TABLE b (
     id INT AUTO_INCREMENT PRIMARY KEY,
     a_id INT,
     FOREIGN KEY (a_id) REFERENCES a(id)
) ENGINE=INNODB;

INSERT INTO b (id, a_id) VALUES(NULL, 1);

Вышеприведенная вставка завершается неудачно с:

ОШИБКА 1452 (23000): невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено ...

0 голосов
/ 24 февраля 2010

я не уверен, я понимаю, вы можете уточнить и показать свои заявления SQL? если я правильно понимаю, (что я не могу) ваш внешний ключ был бы просто пустым, если бы у вас не было значения для этого поля, почему бы произошла ошибка?

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