参考文章: MySQL的ON DUPLICATE KEY UPDATE用法
插入数据时出现主键+唯一键重复:(参考:MySql插入唯一键冲突的三种可选方式)
A.insert ignore into ...(主键重复,忽略)
B.replace into ...(替换)
C.ON DUPLICATE KEY UPDATE
1.惟一索引是由 day+slot 两个字段
2.insert into daily_hit_counter (day, slot, cnt) values ('2017-11-19', 1, 1) ON DUPLICATE KEY UPDATE cnt = cnt + 1;由于插入的数据中 day+slot 与现有的记录的唯一索引重复了,所以执行旧行的更新
3.insert into daily_hit_counter (day, slot, cnt) values ('2017-11-19', 2, 1) ON DUPLICATE KEY UPDATE cnt = cnt + 1;由于插入的数据中 day+slot 与现有的记录的唯一索引或者主键都没有重复了,所以执行新纪录插入
4.在sql操作特殊字符:
//处理emoji字符 + 单引号 在sql组拼会出现sql错误,需要额外处理下
private void doSpecialStr(JSONArray jsonArray) {
for (int z = 0, len = jsonArray.size(); z < len; z++) {
JSONObject oneData = jsonArray.getJSONObject(z);
oneData.forEach((x,y)->{
if (y instanceof String) {
//emoji
y = EmojiUtil.htmlHexadecimalToHtmlTag((String) y);
//单引号
y = ((String) y).replaceAll("'", "\\\\\'");
oneData.put(x, y);
}
});
}
}