mysql 的 on DUPLICATE key只能插入不能update的原因
mysql的 insert into ... on duplicate key ... 只能插入不能update的原因是因为:
第一个字段必须是唯一索引或 unique 主键,
第一个字段必须是唯一索引或 unique 主键,
第一个字段必须是唯一索引或 unique 主键,否则执行就就只会insert 而不会执行update。
mysql 有就插入没有就更新 on DUPLICATE key update批量更新
mysql有个批量更新的方法,mssql则无此命令用法,mysql的这个方法可以用来批量更新,更为强大的是:如果参数已存在则更新,如果数据库里没有这个参数就插入新的。
insert into ...on duplicate key update批量更新
insert into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);
举例
insert into xinhuazidian (a, b, c) VALUES ('aaa','bbb','111cn.net'), ('aaa2','bbb2','m.111cn.net') on DUPLICATE key update b=VALUES(b), c=VALUES(c)
判断字段a,字段a必须是唯一索引或 unique 主键,有则update,没有就insert,更新的是 on DUPLICATE key update 后面设置的b字段和c字段。
使用该语法可在插入记录的时候先判断记录是否存在,如果不存在则插入,否则更新,很方便,无需执行两条SQL
INSERT INTO osc_visit_stats(stat_date,type,id,view_count) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE view_count=view_count+?
-- osc_visit_stats 表有复合主键 (stat_date,type,id)
多字段更新
INSERT INTO osc_space_visit_records(space,user,visit_count,ip,visit_time) VALUES(?,?,?,?,?) ON DUPLICATE KEY UPDATE visit_count=visit_count+1,ip=?,visit_time=NOW()
爱死mysql这个批量更新的方法了,原本多行执行的代码现在一条代码就搞定了并且效率杠杠滴。