проблема внешнего ключа в моей базе данных - PullRequest
1 голос
/ 31 августа 2010

Я создаю сайт социальной сети, работаю за столом друзей и не знаю, что я делаю не так.

У меня есть users (userId, name - userId является первичным ключом) и другая таблица с именем friends (friend1, friend2, status).friend1 и friend2 являются внешними ключами для userId при обновлении и удалении установлены как каскадные таблицы. У пользователей есть запись с 134 в качестве идентификатора, и я хочу изменить ее на 3. Я просто бездельничаю, чтобы увидетькак это работаетВ таблице друзей есть две строки со значением 143.Если я изменю 134 на 3, он не должен каскадно обновляться, а также изменить эти значения в таблице друзей.Я получаю эту ошибку

1451 - Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется (modionz1_nightspot/friends, CONSTRAINT friends_ibfk_1 FOREIGN KEY (friend1) ССЫЛКИ users (userId))

обе таблицы кстати innodb.Любая помощь по этим понятиям будет принята с благодарностью.

1 Ответ

1 голос
/ 31 августа 2010

Во-первых, каскадное обновление - очень плохая идея для любой базы данных, в которой ожидается более пары сотен записей.Если вы используете его и у вас есть тысячи или миллионы дочерних записей, вы можете заблокировать всю систему на несколько часов.Избегайте каскадного обновления.Правильный процесс - добавить родительскую запись, которую вы хотите.Затем обновите дочерние записи, чтобы отразить это значение вместо первоначального, а затем удалите старую родительскую запись.Однако лучше всего проектировать там, где вам не нужно обновлять PK, и это одна из причин, почему многие люди используют суррогатные ключи.

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