遇到一个数据库操作需求:
执行一个数据库语句,可以一次性更新数据库n条行值,按照无则插入,有则更新的规则进行操作,并且数据库已有值,值相同的不更新
解决方式:
INSERT INTO plc (adress, value) VALUES (adress1,value1),(adress2,value2),.... ON conflict(adress) DO UPDATE SET value =excluded.value where plc.value is distinct from excluded.value
语句解释:
即将 (adress1,value1),(adress2,value2).....更新到数据库表中。以adress字段作为标识,若该字段值不存在,则整行插入;若已经存在,则直接更新该行的value字段;另外,当要更新的value值与表中原值相同,则不更新。
优点:
该方式可以进行数据的批量操作,实现无则插入,有则更新。并且减少数据库的不必要更新