基本原理(必須是INNODB存儲引擎):將用戶所做操作暫時保存起來误算,不直接存到數(shù)據(jù)表秋泄,等到用戶確認結(jié)果之后香伴,再執(zhí)行操作我注。
事務(wù)在mysql重通常是自動提交的,但是也可以手動事務(wù)
自動事務(wù)(autocommit)
當(dāng)客戶端發(fā)送一條sql指令(寫操作舅柜,增刪改)給服務(wù)器執(zhí)行之后,不用等待用戶反饋結(jié)果躲惰,會自動同步到數(shù)據(jù)表致份。?
可以同構(gòu)哦autocommit
關(guān)閉之后就不會幫助用戶自動提交了:set autocommit off。
一旦關(guān)閉础拨,需要提供是否同步的命令
commit: 提交
rollback:回滾氮块,清空之前的操作
通常不會關(guān)閉自動事務(wù)绍载,只會在需要使用的時候才會進行操作。
手動事務(wù)
命令:
start transaction滔蝉;開啟事務(wù)击儡,從這條語句開始,后面所有語句都不會直接寫入到數(shù)據(jù)表(而是保存在事務(wù)日志中)
事務(wù)處理:多個寫指令構(gòu)成
事務(wù)提交:commit/rollback蝠引,到這個時候事務(wù)才結(jié)束阳谍。
開啟事務(wù):start transaction;
執(zhí)行事務(wù):
將多個連續(xù)但是一個整體的sql指令逐一執(zhí)行
將多個事務(wù)同時執(zhí)行
提交事務(wù):
確認提交:commit
回滾操作:rollback;
回滾點(savepoint):
當(dāng)有一系列事務(wù)操作是螃概,其中步驟成功了矫夯,不需要重新來過,就可以設(shè)置回滾蒂娜吊洼,后面如果失敗训貌,可以回滾到記號位置
增加回滾點:savepoint 回滾點名字;//字母和下滑線構(gòu)成
回到回滾點:rollback to ?回滾點名字; //回滾點之后的操作就沒有了
注意冒窍,在一個事務(wù)處理中递沪,有很多步驟,可以設(shè)置多個回滾點综液,但是如果回到前面的回滾點款慨,后面的回滾點就失效。
? ? 事務(wù)特點:
原子性(atomicity):事務(wù)是一個不可分割的工作單位意乓,事務(wù)中包括的諸多操作要么不做樱调,要么都做,事務(wù)從start transaction起到提交事務(wù)(commit|rollback)要么成功届良,要么失敗
一致性(consistency):事務(wù)必須是使數(shù)據(jù)庫從一個一直行狀態(tài)笆凌,變到另一個一致性狀態(tài),一致性與原子性是密切相關(guān)的士葫。數(shù)據(jù)表中的數(shù)據(jù)修改乞而,要么一次性修改,要么不變慢显。
隔離性(isolation):一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾爪模。即:一個事務(wù)內(nèi)部操作及使用 的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能相互干擾荚藻。如果一個客戶端屋灌,在使用事務(wù)操作一個數(shù)據(jù)(可能是一行/整個表)的時候,另一個客戶端不能對該數(shù)據(jù)進行操作
如果條件中使用了索引(主鍵)那么系統(tǒng)是根據(jù)主鍵直接找到某條記錄应狱,這時候共郭,與其他記錄無關(guān),只隔離一條數(shù)據(jù),如果沒有索引除嘹,系統(tǒng)是通過全表索引(每一條記錄都會去檢查被檢索的所有數(shù)據(jù)都會被鎖定(整表)
持久性(durability)/永久性(permanence):指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的尉咕,接下來其他操作或故障不應(yīng)該對其有影響(commit之后,所有操作不可返回)