通过sql实现幂等之-》insert ignore into

520 阅读1分钟

背景

在开发过程中,可能遇到一个接口被多次调用,如果这个接口涉及保存数据库,就可能落重复数据到数据库上。

解决

引入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]