当前位置: 首页 > 面试题库 >

保留mySQL自动递增的ID?

松德曜
2023-03-14
问题内容

我们希望从mySQL获取一个自动递增的ID,而无需实际存储它,直到其他与mysql不相关的进程成功完成为止,这样,如果发生异常或应用程序崩溃,就不会存储该条目。我们需要使用ID作为其他进程的密钥。本质上,我们要“保留”自动增量,并将最后一行插入到mySQL中。我们不希望在知道整个过程成功完成之前插入任何行。

可以在mySQL中进行这种自动增量保留吗?

注意:我了解SQL事务。但是,我们的流程包含需要在数据库外部进行的非SQL事务。这些过程可能需要几分钟到几个小时。但是我们不希望任何其他使用相同自动递增ID的进程。这就是为什么我们要“保留”一个自动递增的ID而不真正将任何数据插入数据库的原因。『。


问题答案:

生成自动增量值的唯一方法是尝试插入。但是您可以回滚该事务,并且仍然读取生成的ID。在MySQL
5.1和更高版本中,默认行为是回滚时不会将自动增量值“返回”到堆栈中。

START TRANSACTION;
INSERT INTO mytable () VALUES ();
ROLLBACK;
SELECT LAST_INSERT_ID() INTO @my_ai_value;

现在,您可以确定没有其他事务会尝试使用该值,因此您可以在外部进程中使用它,然后最终手动插入一个使用该ID值的值(当您插入特定的ID值时,MySQL不会产生一个新值)。



 类似资料:
  • 问题内容: 我在使用InnoDB的MySQL中有一个表,其中有一列名为“ id”的列。 所以我的问题是,每当我从表中删除最后一行然后插入新值时,新值都会在删除的ID之后插入。 我的意思是假设我的id是32,我想删除它,然后如果我在删除后插入新行,则列id会自动递增到33。因此序列格式被破坏了,即id = 30,31,33而且不是32。 因此,当我删除最后一列后插入时,请帮我分配ID 32(而不是3

  • 问题内容: 因此,我只是站了一个Spring Hibernate应用程序,似乎无法正确映射文件。我正在使用MySql 5和一个自动递增键。这是我的映射文件的ID部分。 这是生成的SQL 插入联系人(标题,名字,中间名,姓,后缀,职务,职位,护照号码,护照过期,雇主,饮食限制,secondary_contact_fname,secondary_contact_lname,secondary_cont

  • 问题内容: 我的架构看起来像这样: 我已经在同一数据库中创建了counters集合,并添加了一个带有’entityId’的_id的页面。从这里我不确定如何使用猫鼬来更新该页面并获取递增编号。 没有计数器的架构,我希望它保持这种状态,因为这实际上不是应用程序使用的实体。仅应在模式中使用它来自动递增字段。 问题答案: 这是一个示例,如何在Mongoose中实现自动增量字段:

  • 问题内容: 我有一个带有主键字段且具有AUTO_INCREMENT的MySQL表。在阅读了这里的其他文章后,我发现人们遇到了同样的问题,答案也各不相同。有些人建议不要使用此功能,其他人则说它不能被“修复”。 我有: 示例:表中的记录数:18.如果我删除记录16、17和18-我希望输入的下一条记录的courseID为16,但是由于最后输入的courseID为18,所以它将为19。 我的SQL知识不是

  • 问题内容: 我有一个使用hibernate和注解的j2ee应用程序。我如何注释我的pojo类中的Id字段以将其设置为自动增量或自动生成。在添加bean时,我是否将该字段留在bean中为null? 问题答案: 并在保留时将其保留为。(如果使用包装器) 在某些情况下,该策略被解析为或,因此你可能需要手动将其设置为(取决于基础数据库)。 似乎+ 指定序列名称对你有用。

  • 问题内容: 这可能在MySql中吗?我可以有一个以字母为前缀的自动递增主键,例如R1234,R1235,R1236 …等等吗? 问题答案: 您可以做的是将密钥存储为两列。一个char前缀和一个auto-incrementing int,它们都被分组为主键。