INSERT INTO表DEFAULT(key_col)插入零



我在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取代时,自动编号是按预期生成的;但现在,我的应用程序生成前者,而不是后者。

我的问题是:

  1. 是否存在允许DEFAULT(id)生成下一个自动编号?

  2. 应用程序环境中的其他什么变化可能导致了这种情况?

我问这些是因为直到最近才出现这种行为(插入零)。

不提供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 |
+----+---------+------+

你可以遵守手册,也可以掷骰子。这是手册。看看第一个例子。

最新更新