我不确定这是否是数据库
或应用程序
的行为。如果事务在某些记录已添加到具有自动生成的 ID(例如 ID 22
)的表中时失败,并且有回滚
,有没有办法重新-使用 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**
}
}
}
当由于删除 Relation1
中相应实体/记录失败而导致事务回滚时,如何防止丢失 Relation2
中的 ID?我应该更改数据库还是我的应用程序?
最佳答案
从 MySQL.com 站点来看,仍然会有间隙。不确定您的用例是什么,但差距应该不是问题。如果您需要连续的数字,那么您应该以其他方式自动生成它们(例如,在 MySQL 之外使用 PHP 或其他语言)。祝你好运。
http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html
关于mysql - 如何在事务回滚中恢复自动ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24455911/