Navicat 16 表设计界面仅支持开启自增,无法设置步长或起始值;必须用SQL执行SET @@auto_increment_increment/offfset(会话级)或@@global(需SUPER权限且重启失效),推荐建表时明确指定或通过配置文件静态设置。
Navicat 16 里改不了自增步长,必须用 SQL
navicat 16 的表设计界面只提供 自增 开关,不暴露 auto_increment_increment 或 auto_increment_offset 控制项。想调步长或起始值,只能执行 sql 命令——界面操作完全无效。
SET @@auto_increment_increment=3; 会立即生效但仅限当前会话
执行这条语句后,接下来在该连接里新建的记录,自增值就会按你设的步长走:
SET @@auto_increment_increment = 3; SET @@auto_increment_offset = 2;
但注意:
- 这个设置对其他连接、新打开的 Navicat 标签页、或者重启后的连接都无效
- 如果表已有数据,新插入的第一条记录值 = MAX(id) + offset(不是从 offset 开始)
- 若原表 id 最大是 10,offset=2,步长=3,则下一条是 14,再下一条是 17
永久修改要改 global 变量,且需 SUPER 权限
真正让所有新连接都按新步长运行,得用 @@global:
SET @@global.auto_increment_increment = 3; SET @@global.auto_increment_offset = 2;
但有硬性限制:
- 必须用拥有
SUPER权限的账号执行(普通开发账号通常没这权限) - MySQL 8.0+ 默认禁用动态修改 global 变量,可能报错
ERROR 1238: Variable 'auto_increment_increment' is a read only variable - 即使成功,重启 MySQL 服务后仍会恢复为配置文件里的默认值(通常是 1)
更稳妥的做法:在建表或 ALTER 时显式指定步长逻辑
依赖变量容易出问题,尤其在多实例、主从、分库场景。推荐把步长逻辑收口到 DDL 层:
- 新建表时直接写死:
id BIGINT NOT NULL AUTO_INCREMENT,然后靠应用层或中间件控制插入顺序 - 已有表想“模拟”步长效果,可改用触发器 + 自定义序列表,避开 MySQL 自增机制的不可控性
- 若真需全局步长(比如双主写入防冲突),必须在
my.cnf里静态配置:auto_increment_increment = 3和auto_increment_offset = 1,然后重启 MySQL
别指望 Navicat 界面能绕过这些底层约束——它只是个前端,真正的行为由 MySQL server 决定。











