MySQL auto_increment 初始值

问题描述

我在 MysqL v5.7.28 中创建了一个表,其中 PKs 初始值为 50,并以 10 的步长递增。例如50、60、70 等。我的代码是:

  Set Session auto_increment_increment=10;

  Create Table Dept (
  DeptNo Integer NOT NULL auto_increment,DName Varchar(45),Primary Key (DeptNo)
  ) AUTO_INCREMENT=50;

我在表格中插入了 3 行,然后得到

  51,Accounting
  61,Sales
  71,Tax

增量大小是正确的 (10) 但初始值比我预期的高 1。

如果我打开另一个会话,在没有“Set Session auto_increment_increment=10;”的情况下重新运行上面的代码,我得到了预期的结果

  50,Accounting
  51,Sales
  52,Tax

这是正确的初始值 50,但步长是 1,而不是我计划使用的 10 I。

设置 auto_increment_increment 似乎将 auto_increment 字段的初始值增加 1。

对我做错了什么有任何想法吗? 非常感谢,

解决方法

如果您希望这些值是 10 的倍数,您可以set auto_increment_offset=10;

演示:

mysql> create table mytable (id int auto_increment primary key);
Query OK,0 rows affected (0.05 sec)

mysql> set auto_increment_increment=10;
Query OK,0 rows affected (0.00 sec)

mysql> set auto_increment_offset=10;
Query OK,0 rows affected (0.00 sec)

mysql> insert into mytable () values ();
Query OK,1 row affected (0.04 sec)

mysql> insert into mytable () values ();
Query OK,1 row affected (0.04 sec)

mysql> select * from mytable;
+----+
| id |
+----+
| 10 |
| 20 |
| 30 |
+----+

您不能将偏移量设置为 0,因为最小值为 1。

mysql> set auto_increment_offset=0;
Query OK,0 rows affected,1 warning (0.00 sec)

mysql> show warnings;
+---------+------+------------------------------------------------------+
| Level   | Code | Message                                              |
+---------+------+------------------------------------------------------+
| Warning | 1292 | Truncated incorrect auto_increment_offset value: '0' |
+---------+------+------------------------------------------------------+
,

期望 AUTO_INCREMENT 除了“独特性”之外的任何东西都是不明智的。

在很多情况下,一个数字会被跳过而没有真正让你知道。

如果不同的连接插入到那个表中,它们需要适当的协调。

不要使用 A_I,考虑类似的东西

INSERT INTO Dept (...)
    SELECT MAX(DeptNo) + 10,"PartyPlanning"
        FROM Dept;