鍍金池/ 問答/數(shù)據(jù)庫/ mysql delete前有沒有必要select一下

mysql delete前有沒有必要select一下

mysql在執(zhí)行delete操作前有沒有必要先select判斷下。

A:

select Amount into mAmount from list where uid = 12;
if mAmount = 1
then
    delete from list where uid = 12;
else
    update list set Amount = Amount - 1 where uid = 12;
end if;

B

delete from list where uid = 12 and Amount - 1  = 0;
if ROW_COUNT() <> 1
then
    update list set Amount = Amount - 1 where uid = 12;
end if;

a和b在高并發(fā)下哪個效果好點。

回答
編輯回答
維他命

刪除前是否要先查詢一次,這個個人覺得應(yīng)視業(yè)務(wù)而定。正常情況是沒有這個必要,刪除通常按主鍵刪除,性能不是問題,但如果刪除的數(shù)據(jù)部分字段有緩存的話,應(yīng)該先查一下,主要是為了方便清理緩存。舉個栗子:假如要刪除一個用戶,用戶的手機號存在于緩存中(比如已注冊手機號集合),此時直接刪除數(shù)據(jù)的話,緩存里的手機號就不會被移除,導(dǎo)致后來的人再也不能用這個手機號注冊,所以應(yīng)先查詢,再刪除,查詢只是為了處理附加業(yè)務(wù)。

我只是從業(yè)務(wù)角度來講的,與性能無關(guān)。

2017年3月12日 08:02