首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql:关于重复的键更新:只有在值发生更改时才更新

Mysql:关于重复的键更新:只有在值发生更改时才更新
EN

Stack Overflow用户
提问于 2018-04-23 08:46:39
回答 2查看 1.1K关注 0票数 0

我有一个mysql表,在这里我使用这个查询:

代码语言:javascript
复制
INSERT INTO `stats` (`id`, `shop`, `price`, `timestamp`)
VALUES (NULL, '$shop', '$price', 'timestamp') ON DUPLICATE KEY UPDATE price='$price'

商店栏是独一无二的。"Id“=主键。时间戳列由mysql: on update CURRENT_TIMESTAMP更新。

代码语言:javascript
复制
Data in the dB:

row: id=1, shop=viacom, price=5, timestamp=1524183480

案例1:要插入的行: shop=viacom,price=6 结果:现有行被更新

案例2:要插入的行: shop=viacom,price=5 (<--价格没有更改)结果:现有行是未更新

我想让第二个案子开始工作。我可以用php-代码来处理它,但我宁愿让Mysql来完成这个工作。有什么想法吗?(我尝试添加像$shop=shop这样的Where子句)

EN

回答 2

Stack Overflow用户

发布于 2018-04-23 08:57:10

因为shop列是唯一的键,所以可以删除id列并使用下面的内容。

代码语言:javascript
复制
replace into stats (shop, price) values ('$shop', '$price')

如果商店已经存在,那么价格就会更新。否则就会有一家新的商店。这是你想要的吗?

票数 0
EN

Stack Overflow用户

发布于 2018-04-23 11:09:39

尝试手动更新timestamp列:

代码语言:javascript
复制
INSERT INTO `stats` (`shop`, `price`) VALUES ('$shop', '$price')
ON DUPLICATE KEY UPDATE price='$price', timestamp = NOW();

=========

备选案文2:

如果要在MySQL中执行此操作,请创建存储过程并从PHP调用存储过程。

代码语言:javascript
复制
CREATE PROCEDURE `createOrUpdatePrice` (ex_shop varchar(255),ex_price int(11))
BEGIN
declare occures tinyint(1);
SELECT COUNT(`shop`) into occures from `stats` WHERE shop = ex_shop;
IF occures = 0 Then
INSERT INTO `stats` (`id`, `shop`, `price`) VALUES (NULL, ex_shop, ex_price);
ELSE
UPDATE `stats` SET price = ex_price where shop = ex_shop;
END IF;
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49976842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档