mysql妙用:批量插入记录,遇到重复记录则为自动更新

在更新大量数据时可能同时遇到两个问题:sql

  1. 若是每条更新执行一次sql性能很低,也容易形成阻塞;性能

  2. 批量更新时又有可能遇到主键重复的问题
    spa

使用 ON DUPLICATE KEY UPDATE 一条sql解决批量更新和主键重复问题(id为主键)
code

INSERT INTO mytable(id,pid,ele,anim) 
VALUES (?,?,?,?),(?,?,?,?),(?,?,?,?)
ON DUPLICATE KEY UPDATE pid=VALUES(pid),ele=VALUES(ele)
//pid=VALUES(pid),ele=VALUES(ele) 表示出如今values中某列的id字段值与表中已有id字段值重复时,会更新对应记录的这两个字段

//还能够指定其它值或进行运算:pid=pid+1,ele=ele-1

//由于这里未指定列 anim,因此遇到重复id的列,表中该列的 anim字段不会更新

//若是某列做为新记录被插入,则受影响行的值为1;若是表中原有的记录被更新,则受影响行的值为2

它不但对惟一主键有效,对复合主键一样有效,复合主键设置:
table

ALTER TABLE mytable ADD(CONSTRAINT PRIMARY KEY(id,pid));

不过ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并非SQL标准语法,不要乱用哦class

相关文章
相关标签/搜索