事務(wù)
ACID 保證數(shù)據(jù)的正確有效剩拢,一個(gè)操作有誤线得,其他相關(guān)的操作都放棄
問(wèn)題:
- 當(dāng)一個(gè)訂單中購(gòu)買多個(gè)商品時(shí),如果某個(gè)商品庫(kù)存不足徐伐,購(gòu)買失敗贯钩,但是其它的數(shù)據(jù)已經(jīng)存在于表中,這是一個(gè)錯(cuò)誤的結(jié)果
解決:
- 事務(wù):當(dāng)執(zhí)行
insert呵晨、update魏保、delete
語(yǔ)句時(shí),會(huì)改變數(shù)據(jù)庫(kù)中的數(shù)據(jù)摸屠,為了保證操作的正確性谓罗、一致性,需要使用 事務(wù)- 事務(wù)的功能是由
mysql
提供的實(shí)現(xiàn):
- 禁止自動(dòng)提交:with transaction.atomic():
django 中操作數(shù)據(jù)庫(kù) 均是對(duì) 模型類進(jìn)行CRUD 操作
功能 mysql命令 django命令 開(kāi)啟事務(wù) begin sid = transaction.savapoint() 提交事務(wù) commit transaction.savepoint_commit(sid) 回滾事務(wù) rollbok tramsaction_savepoint_rollback(sid) django 中使用事務(wù):https://yiyibooks.cn/xx/Django_1.11.6/topics/db/transactions.html
事務(wù)隔離級(jí)別
1. 串行化:排隊(duì)季二,執(zhí)行效率慢
2. 可重復(fù)讀檩咱,看到的數(shù)據(jù)始終是舊的數(shù)據(jù)
3. 讀取已提交: 一個(gè)事務(wù)已提交數(shù)據(jù)變更,本事務(wù)可以看到其他事務(wù)修改后的數(shù)據(jù)
4. 讀取未提交:其他事務(wù)只要修改了數(shù)據(jù)胯舷,即使未提交刻蚯,本事務(wù)也能修改后看到數(shù)據(jù)值
案例
以商城下單操作為例:
當(dāng)一個(gè)訂單中購(gòu)買多個(gè)商品時(shí),如果某個(gè)商品庫(kù)存不足桑嘶,購(gòu)買失敗炊汹,但是其它的數(shù)據(jù)已經(jīng)存在于表中,這是一個(gè)錯(cuò)誤的結(jié)果提交訂單-事務(wù)操作邏輯及代碼實(shí)現(xiàn).jpg