gpt4 book ai didi

MySQL自动增量值设置为零

转载 作者:行者123 更新时间:2023-11-29 10:52:15 25 4
gpt4 key购买 nike

这是一个表格

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_INCRMENT=0 但这里真正的问题是查询显式设置 id=0,那么为什么它在第一个查询中将其设置为 1。看来 mysql 可以在重复实例中将其设置为 0。

谢谢

最佳答案

插入新记录时,将 AUTO_INCRMENT 列设置为 0 表示“为此列生成新值”( ref )。 AUTO_INCRMENT 列的值从 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 行受影响”消息是因为如果更新现有行 ( ref ),on重复键更新 语句会返回 2。

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

关于MySQL自动增量值设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43515750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com