gpt4 book ai didi

mysql - 如果 "ON DUPLICATE KEY UPDATE"无法更新 UNIQUE KEY,是否应该抛出错误?

转载 作者:行者123 更新时间:2023-11-30 01:03:36 24 4
gpt4 key购买 nike

我遇到一个问题,当我将“ON DUPLICATE KEY UPDATE”与 UNIQUE 字段一起使用时,会出现无提示故障。场景如下:

1)我有一个像这样的映射表:

CREATE TABLE index_user_username (
username VARCHAR(255) NOT NULL UNIQUE,
id INT NOT NULL UNIQUE,
PRIMARY KEY (username, id)
);

注意用户名被标记为UNIQUE

2)我插入一些条目:

mysql> INSERT INTO index_user_username (username,id) VALUES ('dude', 1) ON DUPLICATE KEY UPDATE username=VALUES(username);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO index_user_username (username,id) VALUES ('man', 2) ON DUPLICATE KEY UPDATE username=VALUES(username);
Query OK, 1 row affected (0.00 sec)

这是我对数据库的健全性检查:

mysql> SELECT * FROM index_user_username;
+----------+----+
| username | id |
+----------+----+
| dude | 1 |
| man | 2 |
+----------+----+
2 rows in set (0.00 sec)

3)我将其中一行更新为另一行的用户名之一,但没有失败(我得到“查询正常”):

mysql> INSERT INTO index_user_username (username,id) VALUES ('dude', 2) ON DUPLICATE KEY UPDATE username=VALUES(username);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM index_user_username;
+----------+----+
| username | id |
+----------+----+
| dude | 1 |
| man | 2 |
+----------+----+
2 rows in set (0.00 sec)

所以我的主要问题是,这不应该引发错误吗?如果没有,关于解决方法的选项有什么建议吗(另请参阅下面的注释)?另外,我正在运行版本 5.6.13

澄清:“id”字段映射到另一个表。本质上,这是一个唯一的用户名到用户 ID 映射表。

<小时/>

作为旁注:我确实注意到在命令行中我得到了一个响应,告诉我有多少行受到影响,并认为我可以做一些检查并在代码中抛出错误如果出现 0 个受影响的行。但是,我使用 node.js 模块 ( https://github.com/felixge/node-mysql ) 实现了这一切,并且它似乎对所有上述 INSERT 语句返回相同的响应:

{ fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0 }

任何帮助弄清楚为什么这似乎给了我错误的反馈也会有帮助。

最佳答案

ON DUPLICATE KEY 子句不需要更新唯一键。它已经在那里了。只需从更新中删除该列即可。

关于mysql - 如果 "ON DUPLICATE KEY UPDATE"无法更新 UNIQUE KEY,是否应该抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870974/

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