Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:在重复密钥更新时插入并不是所有字段_Mysql_Insert Update_On Duplicate Key - Fatal编程技术网

MySQL:在重复密钥更新时插入并不是所有字段

MySQL:在重复密钥更新时插入并不是所有字段,mysql,insert-update,on-duplicate-key,Mysql,Insert Update,On Duplicate Key,我有一个用户表,如下所示: id---姓名---电子邮件---性别 id列既是主键也是唯一键。在这里,我想用新的名字和电子邮件信息更新行,但我不必更改它们的性别。我尝试使用查询更新表: INSERT INTO USERS VALUES(id, name, email) ON DUPLICATE KEY UPDATE name=VALUES(name), email=VALUES(email); 它不工作,并发出如下警报: 列计数与第1行的值计数不匹配 例如,假设我们有一行,如下所示: id=1

我有一个用户表,如下所示:

id---姓名---电子邮件---性别

id列既是主键也是唯一键。在这里,我想用新的名字和电子邮件信息更新行,但我不必更改它们的性别。我尝试使用查询更新表:

INSERT INTO USERS VALUES(id, name, email) ON DUPLICATE KEY UPDATE name=VALUES(name), email=VALUES(email);
它不工作,并发出如下警报:

列计数与第1行的值计数不匹配

例如,假设我们有一行,如下所示:

id=1 | name='Mike'| email='1mike@mike.com“|性别=男性”

如何在重复密钥更新时使用将名称更改为“Michael”

id=1 | name='Michael'| email='1mike@mike.com“|性别=男性”


谢谢。

[更新:适应问题更新]

您的问题已经在insert字段中,您只给出了三个值。为此你需要

INSERT INTO users (id, name, email) 
VALUES (42, "patrick","patrick@home") 
ON DUPLICATE KEY UPDATE name="patrick", email="patrick@home";

但是如果你的程序真的做了你想做的事情,还是要三思而后行,特别是当两个传入请求可能获得相同的新id时。

插入的列需要包含唯一键。否则它无法判断您是否有重复项。顺便说一句,主键始终是唯一的键。您确定不只是要执行普通的
更新
,而不是
插入
?@Barmar我将id添加到查询中。我确实需要在重复密钥更新上使用,因为我正在流式传输一些实时数据。这个问题简化了一点。谢谢。我刚刚更新了我的问题,你现在有什么想法吗?谢谢。@Patrick我希望这能有所帮助。我只是想知道你的id是从哪里来的,通常我要么用已知的id更新,要么在没有id的情况下插入新数据。小心不要为不同的新用户创建两个相同的
id
s。mysql的自动增量功能是一个有效的解决方案。谢谢,我知道你的想法并解决了这个问题。实际上,我的ID类似于UUID,所以它不同于自动增量。无论如何,宾果!!我很感激!