mysql:on duplicate key update:仅在值更改时更新

r7knjye2  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(413)

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

INSERT INTO `stats` (`id`, `shop`, `price`, `timestamp`)
VALUES (NULL, '$shop', '$price', 'timestamp') ON DUPLICATE KEY UPDATE price='$price'

商店专栏是独一无二的。”id“=主键。timestamp列由mysql:on update current\u timestamp更新

Data in the dB:

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

案例1:要插入的行:shop=viacom,price=6结果:更新现有行
案例2:要插入的行:shop=viacom,price=5(<--price has not change)结果:现有行未更新
我想让第二个案子开始运作。我可以用php代码来处理它,但我宁愿让mysql来做这项工作。有什么想法吗(我尝试添加一个where子句,比如$shop=shop)

ajsxfq5m

ajsxfq5m1#

由于shop列是唯一键,因此可以删除id列并使用下面的。

replace into stats (shop, price) values ('$shop', '$price')

如果商店已经存在,则更新价格。否则将插入一个新的商店。这就是你想要的吗?

55ooxyrt

55ooxyrt2#

尝试更新 timestamp 手动列:

INSERT INTO `stats` (`shop`, `price`) VALUES ('$shop', '$price')
ON DUPLICATE KEY UPDATE price='$price', timestamp = NOW();

=========
选项2:
如果您想在mysql中执行此操作,请创建存储过程并从php代码中调用存储过程。

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

相关问题