一. 起因
????事情的起因是這樣的,在練手項(xiàng)目的時(shí)候锭魔,表的一個(gè)關(guān)聯(lián)字段并沒(méi)有建立外鍵關(guān)系例证,只是名義上的外鍵關(guān)系路呜,
而在修改數(shù)據(jù)的時(shí)候迷捧,考慮到安全性的問(wèn)題,確保運(yùn)行不會(huì)報(bào)異常的話胀葱,每次在做修改字段的時(shí)候漠秋,都需要先查
尋該字段是否存在,若不存在則需要主動(dòng)添加抵屿。如以下的 userId庆锦,是并沒(méi)有外鍵的!
二. 解決方式
????如果每次都先查詢?cè)傩薷牡脑挘窍喈?dāng)影響效率的轧葛,所以呢搂抒,mysql也幫我們準(zhǔn)備好了解決方式,感謝mysql團(tuán)隊(duì)
? ? 1. ** 首先尿扯,你需要一個(gè)觸發(fā)條件求晶,也就是唯一索引啦,這是必要的!!! 譬如我想我的userId不重復(fù)衷笋,又想達(dá)到該效果芳杏,就需要把該字段設(shè)置為唯一索引,譬如:
? ? 2.? 語(yǔ)法:?duplicate key
????insert into 表名(字段1,userId,字段3,....) values(值1,值,值3,....) on duplicate key update 字段1=值1,字段2=值2 ....
? ? ? ? ? ? 怎么使用已經(jīng)很明顯了吧 :
? ??????????????insert into 表名(字段1,userId,字段3,....) values(值1,值,值3,....)?意思是辟宗,當(dāng)userId不重復(fù)時(shí)爵赵,則會(huì)觸發(fā)這個(gè)插入語(yǔ)句
? ? ? ? ????????update 字段1=值1,字段2=值2 ....? 就是userId的值已經(jīng)存在時(shí),則觸發(fā)這個(gè)修改語(yǔ)句?
? ? ? ? ? ? 那么我的語(yǔ)句就是:
? ? ? insert into wallet (userId,cash,integration,cashStorage,createdAt) values(2,0,0,0,LOCALTIME()) on duplicate key update cash = cash + 0.01
????3. 最后
? ? ? ? 順帶一提泊脐,可以在myBatis的xml文件中獲取當(dāng)前時(shí)間哦空幻,使用? now()?
? ??????INSERT INTO wallet ( userId, cash, integration, cashStorage, createdAt)VALUES( #{userId}, 0, 0, 0, now())
? ? ? ? 學(xué)而時(shí)記之,人笨只能多寫啦容客,加油哦!!!.....