Удаление записей при внешнем ключе

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
DrewBlin
Сообщения: 2
Зарегистрирован: 26 июл 2009, 21:24

Добрый день. Столкнулся с такой проблемой (пока теоритически).
Есть база данных с двумя таблицами. Эти таблицы связаны внешним ключом по одному полю.
Теперь мне надо удалить несколько записей из родительской таблицы и, естественно, из дочерней все их подчиненные записи.
Но важно при удалении дочерних записей не только их удалить, но и посчитать, сколько их было удалено.
Вот и возникает проблема: удалил я записи из дочерней таблицы, посчитал, и пока добирался до удаления родительской записи - кто-то добавил новые дочерние записи. И при удалении родительской записи выйдет ошибка нарушения внешнего ключа.
Как защититься от такой ситуации? Каскадное удаление - не решение, т.к. сильно опасно при ошибочной операции и не даст возможность посчитать кол-во удаленных дочерних записей.
Заранее спасибо.
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

Вот именно для таких ситуаций и придумали транзакции. :D Команда Commit тебе точно поможет.
DrewBlin
Сообщения: 2
Зарегистрирован: 26 июл 2009, 21:24

Расскажи, пожалуйста, как же она мне поможет?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Загугли что такое транзакция и как ей пользоваться.
[syntax=Delphi] [/syntax]
Ответить