问题描述
我在 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;