INSERT INTO表DEFAULT(key_col)插入零?

时间:2015-11-27 06:36:11

标签: mysql auto-increment

我在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. 应用程序环境中的其他哪些变化可能导致这种情况发生?

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

1 个答案:

答案 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。看看第一个例子。