MySQL:在重复密钥更新时插入并不是所有字段
我有一个用户表,如下所示: id---姓名---电子邮件---性别 id列既是主键也是唯一键。在这里,我想用新的名字和电子邮件信息更新行,但我不必更改它们的性别。我尝试使用查询更新表: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
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,所以它不同于自动增量。无论如何,宾果!!我很感激!