我不确定这是DB
还是application
的行为。如果某个记录已经添加到包含自动生成ID的表中,例如ID 22
,并且那里rollback
有一种重用方式ID 22
?这样,在失败的交易之前,表格将恢复到原来的状态 - 即使是关于下一个自动ID 。
以下是我运行的代码,其中指出了失败点:
transaction
{
grC = ORMExecuteQuery( "FROM Relation1 WHERE somid=#form.someid#" );
if( ArrayLen( grC ) GT 0 )
{
oGR.id = [];
for( i =1; i LTE ArrayLen(grC); i = i + 1 )
{
grCNew = EntityNew( "Relation2" );
grCNew.setFirstName( grC[i].getFirstname() );
.........
EntitySave( grCNew );
ORMflush();
oGR.id[i] = grCNew.getID();
EntityDelete( grC ); //<<--- **POINT OF FAILURE**
}
}
}
如果由于未能删除Relation2
中的相应实体/记录而导致事务回滚时,如何防止Relation1
中的ID丢失?是我应该更改的数据库还是我的应用程序?
答案 0 :(得分:2)
从MySQL.com网站上,仍然存在差距。不确定你的用例是什么,但差距不应该是一个问题。如果你需要连续的数字,那么你应该以另一种方式自动生成它们(例如在PHP或其他语言的MySQL之外)。祝你好运。
http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html