解決這類並發問題,可以有以下途徑:
找到業務的唯一約束,使用mysql的unique_key解決
根據業務,如果不能找到唯一約束,那就用鎖解決,可以選擇java的鎖,mysql的鎖,或者redis實現
對某個字段做唯一性約束(首先確保這個字段是唯一的)
ALTER TABLE ADD unique(字段名
);
mysql在存在主鍵沖突或者唯一鍵沖突的情況下,根據插入策略不同,一般有以下三種避免方法。
1、insert ignore
ignore 會忽略錯誤信息,不報錯。但是不推薦使用,因為 給 not null 插入 null 的這種報錯也會被忽略。
2、replace into
3、insert on duplicate key update
注意,除非表有一個PRIMARY KEY或UNIQUE索引,否則,使用以上三個語句沒有意義,與使用單純的INSERT INTO相同。