2 Star 1 Fork 0

zhrun8899 / learning-notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mysql replace 与 on duplicate key.md 2.21 KB
一键复制 编辑 原始数据 按行查看 历史
zhrun8899 提交于 2019-04-04 08:54 . 20190404

1.mysql 的replace语句:

REPLACE into resp_mail(channel_id,push_seq,resp_seq,status_resp,desc_resp
,time_resp)

select channel_id,push_seq,resp_seq,status_resp,desc_resp
,'20190401 09:54:01' from resp_mail where id=46;

表:resp_mail 有唯一索引resp_seq;

记录的resp_seq:RESP-00931

结果:若不存在 resp_seq=RESP-00931的记录,则相当于insert;

否则相当于:delete +insert,请注意:不是update,会执行两条语句;

2. on duplicate key语句

INSERT INTO resp_mail (channel_id,push_seq,resp_seq,status_resp,desc_resp ,time_resp) values( #{channelId},#{pushSeq},#{respSeq},#{statusResp},#{descResp} ,#{timeResp} ON DUPLICATE KEY UPDATE time_resp=#{timeResp},status_resp=#{statusResp},desc_resp=#{descResp};

奇怪的地方:返回的affected rows:2,而不是1.

3.例句

表结构:

DROP TABLE IF EXISTS `report_mail`;
CREATE TABLE `report_mail`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序号',
  `push_seq` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发送序号',
  `resp_seq` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'resp序号',
  `report_seq` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报告序号',
  `status_report` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报告返回码',
  `desc_report` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报告返回码描述',
  `time_report` varchar(23) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报告时间',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `idx_report_seq`(`report_seq`) USING BTREE,
  INDEX `index_resp_seq`(`resp_seq`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 132 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '邮件发送报告' ROW_FORMAT = Compact;

sql:

INSERT INTO report_mail ( push_seq, resp_seq, report_seq, status_report, desc_report, time_report )
VALUES
	( null
	,'RESP-00922','REPORT-00922','0','DELIVRD','20190401 16:37:01' ) 
	ON DUPLICATE KEY UPDATE resp_seq ='RESP-00922',
	status_report ='0',
	desc_report ='DELIVRD',
	time_report ='20190401 16:28:01';
1
https://gitee.com/zhrun8899/learning-notes.git
git@gitee.com:zhrun8899/learning-notes.git
zhrun8899
learning-notes
learning-notes
master

搜索帮助