小编jav*_*ina的帖子

以重复密钥更新为条件

我正在尝试插入一个新行,但如果该键已存在,我想仅在表中的某个其他值不同时更新该行.这可能在mysql查询/语句中吗?

我的表由以下列组成:hat,mittens,name,last_update

帽子+手套构成独特的指数(比如"帽子"和"手套"的颜色是颜色)

我们假设这已经在表中:

1. hat=blue mittens=green name=george last_update=tuesday
2. hat=red mittens=green name=bill last_update=monday

在新密钥上,我想像往常一样插入.在重复键上,我想仅在名称更改时进行更新,否则忽略.原因是我想保留last_update值(timestamp).

hat=yellow mittens=purple name=jimmy -- insert new row
hat=blue mittens=green name=george -- ignore 
hat=blue mittens=green name=betty -- update row

这是否可以不使用单独的语句来首先查找现有行,比较值然后在必要时发出更新?如果是这样,语法是什么?


谢谢你的回复.我尝试了所有这些.确实,只使用一个简单的UPDATE语句

update tbl set name='george' where hat='blue' and mittens='green'
Run Code Online (Sandbox Code Playgroud)

导致没有更新行.但是,使用其中之一

 INSERT INTO tbl (hat,mittens,name) VALUES ('blue','green','george') ON DUPLICATE KEY UPDATE name='george';
Run Code Online (Sandbox Code Playgroud)

要么

INSERT INTO tbl (hat, mittens, name) VALUES ('blue','green','george') ON DUPLICATE KEY UPDATE name=CASE WHEN name <> VALUES(name) THEN VALUES(name) ELSE name END;
Run Code Online (Sandbox Code Playgroud)

不知何故导致行被更新(并且时间戳已更改).

FWIW,这是我正在使用的表格: …

mysql sql

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

mysql ×1

sql ×1