Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Вниз

Откат группы изменений в БД   Найти похожие ветки 

 
VadimKV   (2004-12-09 10:15) [0]

Работаю в Delphi7 с БД FB1.5 через компоненты DBExpress.
Подскажите если кто знает.

Как сделать откат группы изменений в БД.
Например:
 ....
 /*Добавление нового поля*/
 ALTER TABLE t1 ADD f4 "INT";
 /*Заполнение поля*/
 UPDATE t1 SET f4 = 1;
 /*Создание внешнего ключа*/
 ALTER TABLE t1 ADD CONSTRAINT FK_t1
 FOREIGN KEY (f4) REFERENCES t2(f1);
 /*Добавление Уникально ограничения*/
 ALTER TABLE t1 ADD CONSTRAINT UC_t1_f2 UNIQUE (f2)
 ....
Если в каком либо месте произошла ошибка, то мне необходимо отменить все изменения.


 
Val ©   (2004-12-09 10:23) [1]

Насколько я помню - в ИБ изменение метаданных также нужно коммитить(если не включен autocommit), т.е. по идее, достаточно стандартного
begin
 ...
 Commit
except
 RollBack
end;


 
Johnmen ©   (2004-12-09 10:26) [2]

>Если в каком либо месте произошла ошибка, то мне необходимо
>отменить все изменения.

В данном случае это принципиально невозможно. Т.к. в рамках одной транзакции можно менять либо только метаданные, либо только не их...


 
VadimKV   (2004-12-09 10:33) [3]

Можно ли сделать какую нибудь "Большую" транзакцию, а все изменения которые необходимо совершить сделать как вложенные транзакции.
И в случае ошибки сделать откат Первой ("Большой"), что бы она откатила все вложенные?


 
Val ©   (2004-12-09 10:37) [4]

Лучше отделите изменение данных от метаданных, если при попытке изменения метаданных произойдет откат, то и изменить данные вы не сможете в данном случае (такого поля попросту не будет), т.е. тоже получите откат.


 
VadimKV   (2004-12-09 10:43) [5]

Отделить не получится.
Последующей причине.

Если происходит добавление поля (F4) к не пустой таблице и необходимо по этому полю создать Внешний ключ (FK_t1), то это поле (F4)необходиом сначало заполнить данными чтобы не нарушалась ссылочная целостность данных.


 
Val ©   (2004-12-09 10:48) [6]

при пустом поле нарушится ссылочная целостность?


 
Zacho ©   (2004-12-09 10:54) [7]

VadimKV   (09.12.04 10:43) [5]

Так не выйдет.
1. В IB нет вложенных транзакций
2. Невозможно в одной транзакции создать метаданные и заполнить их данными, перед работой с объектами БД, транзакция, в к-рой они создавались должна быть завершена.

Пересматривай логику работы приложения.

Johnmen ©   (09.12.04 10:26) [2]
Т.к. в рамках одной транзакции можно менять либо только метаданные, либо только не их...


Ну, не совсем так :) В одной тр-ции можно создать одну таблицу и работать с данными другой :)


 
Johnmen ©   (2004-12-09 10:58) [8]

>Zacho ©   (09.12.04 10:54) [7]

Да. Просто недостаточно внятно подчеркнул В данном случае
:)


 
Johnmen ©   (2004-12-09 11:01) [9]

http://sql.ru/forum/actualthread.aspx?tid=144575



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.034 c
4-1101128855
Новик
2004-11-22 16:07
2005.01.09
Выделить часть текста в чужом окне


14-1103625332
Мой вопрос такой
2004-12-21 13:35
2005.01.09
Разминка для ума, чего больше, звезд на небе или кол-во


1-1103554398
torch
2004-12-20 17:53
2005.01.09
Можно ли дебагить .dll- ки?


14-1103208361
Шишкин Илья
2004-12-16 17:46
2005.01.09
Вопрос по VC++


14-1103164827
Думкин
2004-12-16 05:40
2005.01.09
С днем рождения! 16 декабря





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский