在数据处理过程中,经常会遇到一种问题,增量更新的问题。
具体逻辑就是先判断一下数据库中有没有对应记录,如果没有就插入新的记录。如果有,就直接更新那一条记录而不插入。
普通做法先比较,然后在更新和插入,这样效率就慢了。下面是MYSQL的做法,用一条命令完成。
表中必須包含主鍵PRIMARY或唯一unique的字段
INSERT INTO table (primary key c,c1,c2) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c1=1, c2=c2+1
当表中已经存在主键primary key c 值为1的记录时,则将会更新而不会添加。
又如:
- INSERT INTO `imgtoday` ( `t_id`,`atype`, `picNum`)
- VALUES ( ?, ?, 1) ON DUPLICATE KEY UPDATE `picNum`= `picNum`+1′;
其中`t_id`是主键。如果插入时发现有该主键值的记录时,就把后面字段PICNUM加1
要注意的事,并非要主键才行,只要SQL中有独一无非的UNIQUE索引即可。比如下面一条:
-
INSERT INTO `student` (`id`, `stuName`,course,score) VALUES (10, '张三三','语文1','70' ) ON DUPLICATE KEY UPDATE `stuName`='张三三',course='语文1',score='59'
这条SQL中,mem字段是UNIQUE索引,主键是另一个字段,它的意思是插入某个会员到表msgread,如果已经有这个会员就直接更新readed字段值。
想了解更多干货,可通过下方扫码关注
可扫码添加上智启元官方客服微信👇