MySQL自动增量值设置为零

时间:2017-04-20 09:38:34

标签: mysql

这是一张表

CREATE TABLE `mytable` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `val` char(128) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY (val)
) ENGINE=InnoDB DEFAULT CHARSET=ascii;

任何想法为什么会发生这种情况,我希望它在第一个查询本身中将id设置为零

MariaDB > insert into mytable set id=0, val="" on duplicate key update id=0, val=val;
Query OK, 1 row affected (0.01 sec)

MariaDB > select * from mytable;
+----+-------+
| id | val |
+----+-------+
|  1 |       |
+----+-------+
1 row in set (0.00 sec)

MariaDB > insert into mytable set id=0, val="" on duplicate key update id=0, val=val;
Query OK, 2 rows affected (0.01 sec)

MariaDB > select * from mytable;
+----+-------+
| id | val |
+----+-------+
|  0 |       |
+----+-------+
1 row in set (0.00 sec)

MariaDB > insert into mytable set id=0, val="" on duplicate key update id=0, val=val;
Query OK, 0 rows affected (0.01 sec)

任何解释将不胜感激。

更新:我知道使用AUTO_INCREMENT = 0但这里真正的问题是查询显式设置id = 0,所以为什么它在第一个查询中将其设置为1。似乎mysql可以在重复实例中将其设置为0。

由于

5 个答案:

答案 0 :(得分:1)

插入新记录时,将AUTO_INCREMENT列设置为0表示“为此列生成新值”(ref)。 AUTO_INCREMENT列的值从1开始。因此:

insert into mytable set id=0, val="" on duplicate key update id=0, val=val;

相当于:

insert into mytable set id=1, val="";

您调用的第二个插入内容会创建一个重复键(对于val字段,不是 id字段。这会导致运行update语句,从而将id更新为零。出现“2行受影响”消息,因为on duplicate key update语句在更新现有行(ref)时返回2。

第三个insert什么也没做。这两个键都是重复的,但现有的行不需要更新,因为它的值已经是您期望的值。在这种情况下,on duplicate key update语句返回“0行受影响”。

答案 1 :(得分:0)

默认情况下,AUTO_INCREMENT的起始值为1,每个新记录的起始值将增加1。 要让AUTO_INCREMENT序列以另一个值开头,请使用以下SQL语句:

ALTER TABLE myTabel AUTO_INCREMENT=0;

Credits

答案 2 :(得分:0)

请勾选 NO_AUTO_VALUE_ON_ZERO 选项。

默认情况下,auto_increment 列不能插入零值。

如果您将 NO_AUTO_VALUE_ON_ZERO 设置为 on,则可以强制输入 auto_increment 列零值。

答案 3 :(得分:0)

关于 NO_AUTO_VALUE_ON_ZERO 的答案是正确的,虽然有点不完整。 sql_mode 有一个选项,允许在自动增量字段中输入明确的零值。默认情况下,0 被视为与 null 相同。如果添加 NO_AUTO_VALUE_ON_ZERO 选项,则允许在该字段中指定零值。我的 cnf 文件中有这个: sql_mode='NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

答案 4 :(得分:0)

此查询显示该类型的消息。我的乳香是什么。

3 63 01:31:26 ALTER TABLE test_data AUTO_INCREMENT = 1 0 行受影响 记录:0 重复:0 警告:0 0.235 秒