我有一张桌子,我根据“document_type”
保留一个计数器TABLE: document_counter
document_type = "general"
last_number = 100
TABLE: document
document_id
document_number
document_type
description
...
如果我需要创建一个新的“文档”但是在“document_number”中输入下一个可用的数字,那么处理事务的正确方法是什么?我应该做两笔交易还是怎么做?
答案 0 :(得分:1)
John Watson是对的,交易应该是你需要的。
根据您使用的dbms,如果您首先更新文档计数器然后读取新编号,则可以锁定该行以进行读取。
只有在您提交当前交易后,下一个交易才能访问它,因此获得正确的下一个数字。
答案 1 :(得分:0)
你开始一个交易,做你所有的更新,然后如果一切正常,提交;否则,回滚。伪代码:
start transaction;
select last_number from document_counter;
insert into document (...) values (...);
update document_counter set last_number = last_number + 1;
commit;