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

防止InnoDB在DUPLICATE KEY上自动递增

都建树
2023-03-14
问题内容

我目前在将主键ID设置为时遇到问题auto increment。它不断增加ON DUPLICATE KEY

例如:

ID | field1     | field2

1  | user       | value

5  | secondUser | value

86 | thirdUser  | value

从上面的描述中,您会注意到我在该表中有3个输入,但是由于每次更新都会自动递增,因此第三个输入的ID为86。

反正有避免这种情况吗?

这是我的mySQL查询的样子:

INSERT INTO table ( field1, field2 ) VALUES (:value1, :value2)
            ON DUPLICATE KEY
            UPDATE field1 = :value1, field2 = :value2

这是我的桌子的样子;

CREATE TABLE IF NOT EXISTS `table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `field1` varchar(200) NOT NULL,
  `field2` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `field1` (`field1`),
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

问题答案:

您可以将innodb_autoinc_lock_modeconfig选项设置"0"为“传统”自动增量锁定模式,以确保所有INSERT语句将为AUTO_INCREMENT列分配连续的值。

也就是说,您不应该依赖于应用程序中自动递增ID的连续性。它们的目的是提供唯一的标识符。



 类似资料:
  • 问题内容: 使用MySQL 5.1.49,我正在尝试实现一个标记系统,我的问题是有两列的表:, (InnoDB) 使用query时,即使忽略了插入,自动增量值也会增加。 通常,这不会有问题,但是我希望有很多尝试为该特定表插入重复项,这意味着我下一个新行字段的值将跳得太多。 例如,我最终得到一个表,该表具有3行,但错误的是 另外,如果我不做而只是定期做并处理错误,则自动递增字段仍会增加,因此下一个真

  • 问题内容: 我有一个使用自定义RowSorter可排序列的JTable。我假设RowSorter类自动将自身作为MouseListener添加到表的ColumnHeader中,因为它无需执行任何自定义鼠标侦听代码即可自动执行排序。这很完美。 我还添加了一些代码(基于此示例),该代码允许用户通过双击列标题中的表之间的空间来调整表列的大小(模仿Excel的行为)。问题是,当用户双击标题以调整列的大小时

  • 问题内容: 如果转到页面a并滚动浏览,则刷新页面将在您离开页面的位置刷新。这很好,但是在URL中存在锚点位置的页面上也会发生这种情况。例如,如果您单击一个链接并在环顾四周后刷新页面,您将不会处于锚点,而页面会跳来跳去。有什么办法可以防止使用javascript吗?因此,无论如何,您始终可以导航到锚点。 问题答案: 由于浏览器行为的更改,不再建议使用此解决方案。查看其他答案。 基本上,如果使用锚,则

  • 问题内容: 我有一个(旧的)工具,该工具不了解像这样的自动关闭标签。所以,我们需要序列与这样的开启/关闭的标签我们的XML文件:。 目前我有: 如何使用打开/关闭的标签进行序列化? 解 由wildwilhelm给出,如下: 问题答案: 似乎标签已分配了的属性: 如果将标记的属性设置为空字符串,则应获得所需的内容: 考虑到这一点,您可能可以在编写XML之前遍历DOM树并修复属性。像这样:

  • 我使用Spring Boot框架构建了一个REST接口。然后,我使用Swagger版本2.9.2来生成文档。从下面的照片可以看到,Swagger自动检测了很多模型。 所以,我的问题是:我怎么告诉Swagger该曝光哪些模特? 下面是我的控制器的Swagger配置和代码片段。 控制器:

  • 在我的spring上下文中,我创建了一个服务bean和这个服务bean的代理(显式)。两者实现相同的接口。 有什么想法吗?