首页 > 数据库 >MySQL的自增ID连续性控制变量innodb_autoinc_lock_mode

MySQL的自增ID连续性控制变量innodb_autoinc_lock_mode

时间:2024-05-23 12:19:10浏览次数:33  
标签:自增 autoinc lock innodb mode MySQL 控制变量

查看 innodb_autoinc_lock_mode 的值

在 MySQL 命令行客户端中使用“SHOW VARIABLES”查看:

MySQL [mydb]> SHOW VARIABLES LIKE 'innodb_autoinc_lock_mode';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_autoinc_lock_mode | 2     |
+--------------------------+-------+
1 row in set (0.01 sec)

修改 innodb_autoinc_lock_mode 的值

在 MySQL 的配置文件 my.cnf 或 my.ini 设置,而无法通过“SET”命令设置:

MySQL [mydb]> SET GLOBAL innodb_autoinc_lock_mode = 0;
ERROR 1238 (HY000): Variable 'innodb_autoinc_lock_mode' is a read only variable
MySQL [mydb]> SET SESSION innodb_autoinc_lock_mode = 0;
ERROR 1238 (HY000): Variable 'innodb_autoinc_lock_mode' is a read only variable

innodb_autoinc_lock_mode 的取值

  • innodb_autoinc_lock_mode = 0(传统模式):

在这种模式下,InnoDB 使用传统的自增锁定策略。当插入一行数据时,InnoDB 会锁定整个自增序列,直到事务提交。这种策略可以避免自增 ID 的重复分配,但可能导致性能下降,特别是在高并发环境下。

  • innodb_autoinc_lock_mode = 1(连续模式):

在这种模式下,InnoDB 使用连续的自增锁定策略。当插入一行数据时,InnoDB 会锁定自增序列的一个范围,而不是整个序列。这种策略可以提高性能,特别是在高并发环境下,但可能导致自增 ID 的不连续分配。

  • innodb_autoinc_lock_mode = 2(交错模式):

在这种模式下,InnoDB 使用交错的自增锁定策略。当插入一行数据时,InnoDB 会锁定自增序列的一个范围,并在事务提交时释放锁。这种策略可以提高性能,特别是在高并发环境下,同时保持自增 ID 的连续性。

在高并发环境下,建议使用连续模式(1)或交错模式(2)以提高性能,然而这可能会导致自增 ID 的不连续分配。在需要保持自增 ID 连续性的场景下,可以使用传统模式(0),但这可能会导致性能下降。请注意,在某些版本的 MySQL 中,innodb_autoinc_lock_mode 可能不可用或被替换为其他选项。在这种情况下,请参考 MySQL 文档以获取正确的设置方法。

标签:自增,autoinc,lock,innodb,mode,MySQL,控制变量
From: https://www.cnblogs.com/aquester/p/18208147

相关文章

  • MySQL 之 约束 (主键、唯一、非空、自增、外键)
    MySQL之约束(主键、唯一、非空、自增、外键)目的:使得数据更准确,更完整。约束的分类:1、键约束(1)主键约束(2)唯一键约束(3)外键约束2、非空约束3、默认值约束4、自增约束主键约束(一)概述1、关键字:primarykey2、特点:增加主键约束的列(字段)的值必须是非空+唯一的,一个表只有......
  • MySQL设置表自增步长
    在MySQL中,我们可以使用AUTO_INCREMENT属性为表的某一列设置自增功能。但是,MySQL本身并不直接支持设置自增步长(incrementstep)的功能,即我们不能直接指定每次自增的数值增加多少。不过,我们可以通过一些间接的方法来模拟这个功能。一、表设置自增字段但首先,让我们看一下如何为一个......
  • 手动执行SQL触发器id自增报错处理方式
      一、查询出触发器创建的sqlSELECTdbms_metadata.get_ddl('TRIGGER','TRI_XXX_STORAGE','XSY')AStrigger_sql FROMdual; 二、删除触发器DROPTRIGGERXSY.TRI_XSY_STORAGE;三、创建触发器CREATEORREPLACETRIGGERTRI_XSY_STORAGEBE......
  • mybatis获取自增主键
    获取自增主键实体对象设置主键自增,插入到数据库后拿到主键ID。数据库使用的是mysql。useGeneratedKeys非常简单的实现:mapper接口publicinterfaceUserMapperextendsBaseMapper<User>{intinsertUser(Useruser);}mapper文件<mappernamespace="com.oracat.moe.......
  • Java中的自增自减
    在Java中,自增(++)和自减(--)是两种特殊的运算符,用于在表达式的计算过程中增加或减少变量的值。它们有两种形式:前缀形式(++variable或--variable)和后缀形式(variable++或variable--)。这两种形式在表达式中的行为有所不同。前缀形式++variable:先增加变量的值,然后返回增加后的值。--......
  • MySQL 数据库自增主键生成的优缺点
    MySQL数据库中使用自增主键(AUTO_INCREMENT)作为表的主键有以下显著的优点和缺点:**优点**:1.**简化开发**:开发人员不需要手动指定每条记录的唯一标识,减少了出错的可能性。2.**性能优化**:自增主键通常会导致数据在物理存储上近乎顺序地排列,这能够提升基于主键的查询效率,特别......
  • mybatis只sql语句插入新行后返回主键自增列或者非自增列
    1.执行完insert语句,返回自增列最新的值。两种方式<insertid="create"parameterType="com.xcg.webapp.model.entity.Production"useGeneratedKeys="true"keyProperty="production_id">insertintoproduction(production_code,prod......
  • dedebiz列表添加自增序号代码
    dedebiz列表添加序号代码如下://默认从1开始自增[field:globalname=autoindex/]但是有时候我们可能不需要从1开始,比如从2开始,那么就需要这样写://实现从2或者其他数字开始自增修改@me+1即可[field:globalname=autoindexrunphp="yes"]@me=@me+1;[/field:global]如果想让它......
  • postgresql重置序列和自增主键
    1.问题背景数据表中插入了几条测试数据,后又手动删除,导致后面插入数据的时候报主键冲突:ERROR:duplicatekeyvalueviolatesuniqueconstraint"tableName_pkey"DETAIL:Key(id)=(1)alreadyexists.12即使采用INSERTIGNORE的方式或者REPLACEINTO的方式还是报错,所以就想......
  • 新手大白话 [HNCTF 2022 Week1]Challenge__rce RCE自增绕过
    今天遇到个RCE难题,挺另类的,这里做个复盘。进入题目直接给出了源码,可以发现就是个无字母RCE,且有长度限制不能使用url取反绕过,到这想到了以前的一个rce自增绕过方式,但是以前的没有长度限制。点击查看代码<?phperror_reporting(0);if(isset($_GET['hint'])){highlight_f......