Внешний ключ в таблице MySQL - необходимо ли наличие целевых данных? - PullRequest
1 голос
/ 20 августа 2011

у меня 2 таблицы

Таблица A (id_A, имя_A, info_A)

tableB (id_B, A_id, some_data) внешний ключ (A_id) ссылается на tableA (id_A)

Поэтому, когда я вставляю строку в B со значением XXX в качестве значения во втором столбце id_A, необходимо ли, чтобы в table_A была строка с XXX в качестве id?

Если нет, то какое ограничение я должен наложить на таблицы, чтобы таблица B ссылалась только на присутствующую строку table_A?

1 Ответ

0 голосов
/ 20 августа 2011

Да, если TableA.id_A является первичным ключом и TableB.A_id имеет ограничение внешнего ключа, ссылающееся на этот первичный ключ, то значение XXX должно существовать в TableA.id_A, прежде чем TableB.A_id может содержать XXX.

Это также означает, что вы не можете удалить или изменить значение XXX в TableA.id_A, в то время как значение XXX существует в TableB.A_id. Сначала вам нужно будет удалить, изменить или установить значение NULL в TableB.A_id. Вы также можете объявить внешний ключ с помощью параметров CASCADE, чтобы изменения в TableA также применялись к TableB атомарно. Но в зависимой таблице никогда не может быть значения «сирота».

Обратите внимание, что если вы используете механизм хранения MyISAM для Таблицы A или Таблицы B, то определение ограничений внешнего ключа игнорируется, и база данных не обеспечивает ссылочную целостность между двумя таблицами. Вы должны использовать механизм хранения InnoDB для обеих таблиц, чтобы получить поддержку ограничений внешнего ключа.

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