如何在事务回滚中恢复自动ID

时间:2014-06-27 15:48:33

标签: mysql hibernate orm coldfusion coldfusion-10

我不确定这是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丢失?是我应该更改的数据库还是我的应用程序?

1 个答案:

答案 0 :(得分:2)

从MySQL.com网站上,仍然存在差距。不确定你的用例是什么,但差距不应该是一个问题。如果你需要连续的数字,那么你应该以另一种方式自动生成它们(例如在PHP或其他语言的MySQL之外)。祝你好运。

http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html