[英]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;
我被你使用的@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.