背景
在开发过程中,可能遇到一个接口被多次调用,如果这个接口涉及保存数据库,就可能落重复数据到数据库上。
解决
引入insert ignore into 来进行数据插入,如果是主键或是唯一索引重复的数据则不会进行插入
假设表结构如下:
CREATE TABLE `test_operator` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '类型',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`)
UNIQUE KEY `unq_name` (`name`) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试操作';
假设接口第一次调用,插入数据
insert ignore into test_insert(`name`,`type` ) values ( 'test',1 );
数据库会落一条数据
16:51:19.832 [AA2112732F6D48CAA5A7937D4F574D2F] [http-nio-8435-exec-3] [DEBUG] [XXXXXXX] [<== Updates: 1]
再次相同数据调用,数据库不会再插入数据,基于此可实现幂等机制
16:51:19.832 [AA2112732F6D48CAA5A7937D4F574D2F] [http-nio-8435-exec-3] [DEBUG] [XXXXXXX] [<== Updates: 0]