繁体   English   中英

仅当值已更改时,如何插入数据库?

[英]How do I insert into a database only if a value has changed?

我需要更新(替换)MySQL数据库中的字段,但前提是它们已经更改。

该表包含ID,文本字段和更改日期。 用户根据ID更改的日期按ID查询数据。 即如果日期在用户查询数据的最后一次之前,则他不想要它。

我想仅在文本字段与具有相同id的现有文本字段不同时才更改数据库中的日期。

我可以查询数据,比较结果,只有在新数据不同时回发,但这是很多开销,数据库连接速度很慢,所以我在一个查询中寻找一种方法。

谢谢。

您可以在更新查询中包含CASE语句,该语句将有条件地设置日期字段,如下所示:

UPDATE MyTable
SET textfield = @newValue,
datefield = (CASE WHEN textfield <> @newValue THEN NOW() ELSE datefield END);

如果未更改textfield的值,此查询将“ datefield ”“设置”为已包含的相同值。

当问到这个问题时可能不存在的简单方法:

CREATE TRIGGER `TimeTrigger` BEFORE UPDATE ON `MyTable` 
FOR EACH ROW
BEGIN
 SET NEW.lastUpdate = (CASE WHEN NEW.text <> OLD.text THEN NOW() ELSE NEW.lastUpdate END);
END;

相关: 仅在行已更改时更新后的MySQL触发器

我被你使用的@value标签弄错了,订单错了,你应该试试像:

UPDATE my_table
SET
    updated = (CASE WHEN foo <> 'new_value' THEN NOW() ELSE updated END),
    foo = 'new_value'
WHERE id = 11;

我想你在这里回答了你自己的问题:

如果文本字段与具有相同ID的现有文本字段不同

换句话说,使用MySQL CASE语句检查文本字段是否不同。 如果是,请在文本字段和日期上进行更新。 如果没有,请不要进行任何更新。

或者,您可以在代码中进行相同的检查,这将减少数据库的访问次数。 这可能会缓解数据库连接速度缓慢的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM