鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 如果一個(gè)操作需要執(zhí)行 n 個(gè) sql,都要用事務(wù)嗎?

如果一個(gè)操作需要執(zhí)行 n 個(gè) sql,都要用事務(wù)嗎?

很多時(shí)候一個(gè)操作,實(shí)際上要分好幾個(gè)步驟,每個(gè)步驟都會(huì)執(zhí)行一個(gè) sql 語(yǔ)句,我知道可以通過(guò) mysql 事務(wù)的機(jī)制保證原子性,但是對(duì)于非重要業(yè)務(wù)的時(shí)候也這樣做就有點(diǎn)麻煩了,大家對(duì)于這樣的需求用不用事務(wù)?

回答
編輯回答
咕嚕嚕

為什么不用,即使不需要保證原子性,你也可以通過(guò)事務(wù)這種形式讓代碼邏輯清晰,你的代碼是要給后人看的,順手的事何樂(lè)而不為呢。

2018年2月8日 04:40
編輯回答
情已空

取決于業(yè)務(wù)邏輯。

具體來(lái)說(shuō)就是:當(dāng)其中某個(gè) SQL 執(zhí)行失敗時(shí),之前執(zhí)行過(guò)的 SQL 是否要全部回退?

如果是的話,那當(dāng)然要用事務(wù)了。

那么什么情況下不是的呢?

比如最后一個(gè) SQL 是寫入調(diào)試數(shù)據(jù),前面的業(yè)務(wù)已經(jīng)成功完成,那么即使最后的 SQL 執(zhí)行失敗,也不應(yīng)該讓已經(jīng)成功的操作付諸東流,所以最后一個(gè) SQL 沒(méi)必要加入事務(wù)當(dāng)中。

2018年8月11日 20:54