Mysql 防止重复密钥更新时自动增量

Mysql 防止重复密钥更新时自动增量,mysql,perl,Mysql,Perl,我使用下面的查询填充数据库,并返回最后一个Insert ID或ID(如果记录已经存在)。它在我的Perl脚本中工作得很好,但是我注意到,即使记录存在,自动增量字段仍然会上升,这会导致ID字段中出现间隙。这附近有什么地方吗?我已经看过其他的例子,但问题并不完全相同 INSERT INTO `testTable` (`testA`, `testB`) VALES ("test1", "test2") ON DUPLICATE KEY UPDATE `Id` = LAST_INSERT_ID(`I

我使用下面的查询填充数据库,并返回最后一个Insert ID或ID(如果记录已经存在)。它在我的Perl脚本中工作得很好,但是我注意到,即使记录存在,自动增量字段仍然会上升,这会导致ID字段中出现间隙。这附近有什么地方吗?我已经看过其他的例子,但问题并不完全相同

INSERT INTO `testTable` (`testA`, `testB`) VALES ("test1", "test2")
  ON DUPLICATE KEY UPDATE `Id` = LAST_INSERT_ID(`Id`);
这是Perl,我用它获取Id:

$dbh->do($sql);
$blockInfo = $dbh->{mysql_insertid};

谢谢你的帮助或建议。我想做一个if语句,查找字段并返回Id,如果它在那里,如果没有插入,但我正在尝试最小化我使用的查询量。

您能提供更多详细信息吗?如果“Id”是“testTable”中的自动递增列,为什么要随更新而更改它?这是一个解决方法,如果行已经存在,则返回该行的Id;如果必须插入该行,则返回该行的Id。我决定放弃这个方法,直接运行一个查询,如果它什么也不返回,那么它只会执行一个插入。容易多了。谢谢你的回复。你能提供更多的细节吗?如果“Id”是“testTable”中的自动递增列,为什么要随更新而更改它?这是一个解决方法,如果行已经存在,则返回该行的Id;如果必须插入该行,则返回该行的Id。我决定放弃这个方法,直接运行一个查询,如果它什么也不返回,那么它只会执行一个插入。容易多了。谢谢你的回复。