我在tbl
中有这个主键列:
`id` INT(5) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY
当我运行下面的查询时,插入零而不是下一个自动增量编号:
INSERT INTO `tbl` (id, col1, ...) VALUES (DEFAULT(id), "value 1", ...)
有趣的是,这种行为是最近的,让我想知道我可能会改变什么设置导致这个。
我考虑的第一件事是NO_AUTO_VALUE_ON_ZERO
。我已将此添加到配置文件中的sql_mode
,现在就是这样:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_VALUE_ON_ZERO
。
我知道当DEFAULT(id)
替换为NULL
时,会按预期生成自动编号;但就像现在一样,我的应用程序产生前者而不是后者。
我的问题是:
是否有可能允许DEFAULT(id)
生成的设置
下一个车号?
应用程序环境中的其他哪些变化可能导致这种情况发生?
我问这些因为这种行为(插入零)直到最近才出现这种情况。
答案 0 :(得分:3)
不要将id作为auto_increment
PK列的列提供。你这样做只是在惹麻烦。也许司机在某层上得到了更新。当你按照自己的方式做到这一点时,麻烦就会成为一种冲击。它确实如此。
CREATE TABLE myTable999
( id int auto_increment primary key,
thing varchar(100) not null,
colC int not null
);
insert myTable999(thing,colC) values ('fish',5),('mustard',11),('gators',-12);
select * from myTable999;
+----+---------+------+
| id | thing | colC |
+----+---------+------+
| 1 | fish | 5 |
| 2 | mustard | 11 |
| 3 | gators | -12 |
+----+---------+------+
您可以遵守手册,或掷骰子。 Here is the Manual。看看第一个例子。