hello,word

mysql的知识扩展

专门记录一下有用的,但是感觉乱七八糟的mysql 语句:

1.存在则修改,不存在则插入

REPLACE,此关键词如果存在主键冲突,则会先删除旧记录,再插入新记录(相当于 DELETE + INSERT)

只有当你不在乎旧数据,想完全用新值覆盖旧记录时才用。

与之相对应的sql语句

INSERT ... ON DUPLICATE KEY UPDATE

如果插入时,存在唯一键(唯一索引、主键),则根据唯一键的值更新update后面的数据

举例

INSERT INTO fa_interaction (user_id, activity_id, num, createtime, updatetime) VALUES (?, ?, 1, NOW(), NOW()) ON DUPLICATE KEY UPDATE num = IF(num < 5, num + 1, num), updatetime = NOW();

这能完美实现:不存在则插入 num=1,存在则 num+1(但不超过5)

 

REPLACE INTO fa_interaction (user_id, activity_id, num, createtime, updatetime) VALUES (?, ?, 1, NOW(), NOW());

每次点击 num 都会重置为1(因为 REPLACE 先删旧记录,再插入新记录的 num=1),如果有自增主键 id:旧记录被删,新记录拿新ID,可能导致关联表外键混乱

posted @ 2026-01-19 16:26  tying  阅读(0)  评论(0)    收藏  举报