Почему внешний ключ не обновляется? - PullRequest
0 голосов
/ 13 марта 2011

Я вставляю данные в столбец TEMP1.aa (первичный ключ в temp1), но он не импортируется в столбец TEMP2.cc (внешний ключ в TEMP2).

Почему?

Я подумал, что если вставить данные в первичный ключ, это автоматически вставить во внешний ключ!Если это правда, что если мы вставим в первичный ключ, внешний ключ должен быть обновлен?

Ответы [ 3 ]

4 голосов
/ 13 марта 2011

Внешний ключ не обновляет дочерние ссылки, он только гарантирует, что значение, хранящееся в столбце, уже существует в родительской таблице.

Но MySQL поддерживает каскадное обновление, добавляя ON UPDATE CASCADE к ограничению внешнего ключа в таблице TEMP1. В противном случае вам нужно рассмотреть возможность использования триггера для более сложных правил / требований.

Справка:

1 голос
/ 13 марта 2011

Рассмотрим эти таблицы

Fruits
ID   Name
1    Apple
2    Orange
3    Grapes

Sales
ID   Fruit   Amount
1    1       2.45
2    3       1.23
3    1       2.23
4    2       6.22

Внешний ключ на Sales(Fruit) to Fruits(ID) гарантирует, что каждое значение Фруктов в Продажах должно совпадать с идентификатором из Фруктов. Нет, на ваш вопрос

Я вставляю данные в столбец aa (первичный ключ в temp1), но он не импортируется в столбец TMP2.cc (внешний ключ в temp2).

Итак, мы вставляем запись в Фрукты (ID: 4, Имя: Груша). Вы хотите импортировать его в Sales? Как?

Читайте некоторые основы об иностранных ключах

0 голосов
/ 13 марта 2011

Нет, внешние ключи так не работают.

Внешние ключи используются для связывания двух таблиц через ключ. В одной таблице у вас есть PRIMARY KEY и все атрибуты, относящиеся к этой сущности.

В другой таблице у вас есть FOREIGN KEY, который сообщает базе данных "эй, пользователь, вы можете вставить сюда значение, только если оно также существует как PRIMARY KEY в моей справочной таблице" .

Вы, пользователь, по-прежнему должны выбирать, хотите ли вы INSERT строку в вашей внешней таблице или нет.


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

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