помогите начинающему.почти дочитал книгу Borry.главу о транзакцияx точно.но так и не понял следующее:
создаю таблицу:
CREATE TABLE TBL1 (FL1 INTEGER NOT NULL);
ALTER TABLE TBL1 ADD PRIMARY KEY (FL1);
и пишу в таблицу 1.
затем запускаю скрипт:
connect '127.0.0.1:c:\db\test.fdb' user 'sysdba' password '1'^
set transaction;
insert into tbl1(fl1)values(1);
insert into tbl1(fl1)values(2);
commit;
выдаёт ошибку.это и понятно-1 там уже есть.но почему же тогда 2 записывается если это одна транзакция,которая завершилась ошибкой?ведь должно записать либо всё либо ничего.
что и где я не дочитал?
вопрос о транзакциях
-
- Сообщения: 25
- Зарегистрирован: 11 авг 2007, 17:40
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Сообщения: 25
- Зарегистрирован: 11 авг 2007, 17:40
я не нашёл там аналогичного моему примера.и у Скляра во Введении в Interbase как-то вскользь упоминается set transaction и всё.
как же тогда корректно и 100%-надёжно сделать в одной транзакции к примеру списание суммы с одного счёта и начисление на другой?
insert into credit
if select from credit=OK then insert into debit??
(на синтаксис не обращайте внимание, я об алгоритме)
это уже какой-то бэйсик получается
какое решение?проверять после изменений код ошибки(gdscode sqlcode) и только если всё нормально делать commit, иначе rollback?
как же тогда корректно и 100%-надёжно сделать в одной транзакции к примеру списание суммы с одного счёта и начисление на другой?
insert into credit
if select from credit=OK then insert into debit??
(на синтаксис не обращайте внимание, я об алгоритме)
это уже какой-то бэйсик получается
какое решение?проверять после изменений код ошибки(gdscode sqlcode) и только если всё нормально делать commit, иначе rollback?
блин, выкинь ты скляра. Это перевод документации по IB 5, одной книги - ProgGuide, которая сейчас называется embedded sql guide, и даже вредна в определенном смысле.и у Скляра во Введении в Interbase
еще раз повторяю - только клиент, т.е. твое приложение, решает, как завершать транзакцию в зависимости от успешности или неуспешности выполненных операторов.только если всё нормально делать commit, иначе rollback?