Установка номера для столбца из таблицы счетчиков в той же транзакции - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть таблица, в которой я храню счетчик в соответствии с «типом документа»

TABLE: document_counter
document_type = "general"
last_number = 100

TABLE: document
document_id
document_number
document_type
description
...

Как правильно обрабатывать транзакцию, если мне нужно создать новый «документ», но добавить «номер_ документа» следующий доступный номер? Должен ли я сделать две транзакции или как?

Ответы [ 2 ]

1 голос
/ 15 октября 2012

Джон Уотсон прав, транзакция должна быть именно тем, что вам нужно.

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

Только после того, как вы подтвердите текущую транзакцию, следующая транзакция получит к ней доступ, поэтому получит правильный следующий номер.

0 голосов
/ 22 ноября 2011

Вы начинаете транзакцию, делаете все свои обновления, а затем, если все работает, фиксируете;в противном случае откат.Псевдокод:

 start transaction;
 select last_number from document_counter;
 insert into document (...) values (...);
 update document_counter set last_number = last_number + 1;
 commit;
...