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

标签 mysql hibernate orm coldfusion coldfusion-10

我不确定这是否是数据库应用程序的行为。如果事务在某些记录已添加到具有自动生成的 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/

相关文章:

php - 在一个查询中显示两个 MySQL 选择

php - mysqli_query() 和 mysqli_real_escape_string() 期望参数 1 为 mysqli,给定为 null

java - 对象关系映射的缺点

sql - 如何避免注入(inject)按运行时值排序查询

c# - 当列实际存在于数据库中时,ServiceStack OrmLite 返回无效的 ColumnName 错误

mysql - Sql 每个左表结果从右表返回一行

mysql - 当数据库用户需要密码时如何使用mysqldiff?

java - 为 @GenerateValue 字段获取 "java.sql.SQLException: No value specified for parameter"

java - 如何在 Spring Boot 和 Hibernate 等框架中通过缓慢的启动时间来提高工作效率?

database - 什么是适合我使用 Kotlin 的需求的轻量级 ORM?