在同一事务中将数字设置为来自计数器表的列

时间:2011-11-22 02:21:23

标签: mysql innodb

我有一张桌子,我根据“document_type”

保留一个计数器
TABLE: document_counter
document_type = "general"
last_number = 100

TABLE: document
document_id
document_number
document_type
description
...

如果我需要创建一个新的“文档”但是在“document_number”中输入下一个可用的数字,那么处理事务的正确方法是什么?我应该做两笔交易还是怎么做?

2 个答案:

答案 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;