插入数据前检测唯一性
1. dual
INSERT INTO table (primarykey, field1, field2, ...)
SELECT key, value1, value2, ...
FROM dual
WHERE not exists (select * from table where primarykey = key);
-- eg:
INSERT INTO fms_close_account_period (
month,
status,
tenant_id,
company_id,
create_time,
create_id
) SELECT
'2019-12','1',1062,1062,'2019-11-25 00:00:00',28
FROM
DUAL
WHERE
NOT EXISTS (
SELECT
month,tenant_id,company_id
FROM
fms_close_account_period
WHERE
tenant_id = 1062
AND company_id = 1062
AND MONTH = '2019-12'
);
并发测试:
@Test
@Rollback(false)
public void concurrentCloseTest() throws InterruptedException {
//并发测试
ArrayList<String> codes = new ArrayList<>();
ExecutorService executorService = Executors.newFixedThreadPool(40);
for (int i=0;i<5;i++){
executorService.submit(new Runnable() {
@Override
public void run() {
CloseAccountPeriodReq req = new CloseAccountPeriodReq();
req.setTenantId(1062L);
req.setCompanyId(1062L);
req.setCreateId(1987L);
closeAccountPeriodReadService.list(req);
}
});
}
Thread.sleep(5000);
System.out.println(codes);
}