Удаление строки SQL, игнорирующей все внешние ключи и ограничения

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

37
задан Matt 7 December 2009 в 21:34
поделиться

5 ответов

You can set the constraints on that table / column to not check temporarily, then re-enable the constraints. General form would be:

ALTER TABLE TableName NOCHECK CONSTRAINT ConstraintName

Then re-enable all constraints with

ALTER TABLE TableName CHECK CONSTRAINT ConstraintName

I assume that this would be temporary though? You obviously wouldn't want to do this consistently.

50
ответ дан 27 November 2019 в 04:23
поделиться

Do not under any circumstances disable the constraints. This is an extremely stupid practice. You cannot maintain data integrity if you do things like this. Data integrity is the first consideration of a database because without it, you have nothing.

The correct method is to delete from the child tables before trying to delete the parent record. You are probably timing out because you have set up cascading deltes which is another bad practice in a large database.

7
ответ дан 27 November 2019 в 04:23
поделиться

Да, просто запустите

DELETE FROM myTable where myTable.ID = 6850

И ПОЗВОЛЬТЕ ДВИГАТЕЛЮ ПРОВЕРИТЬ ОГРАНИЧЕНИЯ .

Если вы пытаетесь быть «умным» и отключать ограничения, вам придется заплатить огромную цену: восстановление ограничений должно проверять каждую строку вместо той, которую вы только что удалили. Существуют внутренние флаги, которые SQL сохраняет, чтобы знать, является ли ограничение «доверенным» или нет. Ваша «оптимизация» приведет либо к изменению этих флагов на «false» (это означает, что SQL больше не доверяет ограничениям), либо к их повторной проверке с нуля.

См. Рекомендации по отключению индексов и ограничений и Недоверенные ограничения и производительность .

24
ответ дан 27 November 2019 в 04:23
поделиться

Для всех таблиц с внешними ключами, указывающими на эту, используйте:

ALTER TABLE MyOtherTable NOCHECK CONSTRAINT fk_name
1
ответ дан 27 November 2019 в 04:23
поделиться
0
ответ дан 27 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: