как обновить первичный ключ, если он также является внешним ключом для другой таблицы? - PullRequest
3 голосов
/ 30 января 2012

У меня есть таблица tableA, в которой есть столбец myID. myID является первичным ключом в таблице A и внешним ключом для таблицы B.

когда я пытался обновить myID определенной записи в таблице A:

update tableA
set myID = 123456
where myID= 999999

Я получил эту ошибку:

Оператор UPDATE конфликтовал с ограничением FOREIGN KEY "TableA_FK00". Конфликт произошел в базе данных "mydatabase", таблица «tableA», столбец «myID».

Я установил правило обновления myID на «Каскад», а для параметра «Принудительное ограничение внешнего ключа» - «Нет», но я все еще не могу обновить. как мне поступить?

Ответы [ 2 ]

0 голосов
/ 30 января 2012

Если в таблице B есть запись, ссылающаяся на tableA с PK 123456, а tableB - это таблица с ограничением «tableA_FK00», значит, вы нарушаете ограничение.Если вам нужно изменить PK строки в таблице A (и я не уверен, почему вы это делаете, PK никогда не должен меняться !!!), вы должны убедиться, что никакие другие записи не ссылаются на него с ограничениями FK.

Итак, если вы настаиваете на изменении PK в таблице A:

  1. Найдите, какая таблица имеет ограничение "tableA_FK00" (убедитесь, что это только таблица B , см. Сообщение здесь ).
  2. Временно удалить ограничение в таблице B
  3. Обновить таблицу A
  4. Обновить все строки в TableB, для которых требуется изменить их FK
  5. Повторно применить ограничение FK для таблицы B

Другой вариант:

  1. Вставить все идентификаторы строк из tableB с FK 123456 во временную таблицу (эта таблица содержит только ключи PK от tableB)
  2. Установите для поля tableB FK значения NULL
  3. Установите все поля в таблицеB FK = null, соединив их с временной таблицей таблицыB PK
  4. Измените строку в таблицеA
  5. Установите все полястроки в таблицеB до 999999 путем соединения с вкладкой tempле.
0 голосов
/ 30 января 2012

Попробуйте выполнить следующие действия:

  • Временно отключить ограничения FK (ALTER TABLE tableA WITH NOCHECK CONSTRAINT ALL).
  • Обновите ваши первичные ключи
  • Обновите свои внешние ключи, чтобы они соответствовали изменению основных ключей
  • Включить обратное применение ограничений FK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...