事務
事務是作為單個工作單元而執行的一系列操作,如查詢和修改資料,甚至是修改資料的定義。
定義資料邊界的方式有顯式和隱式兩種。顯式事務的定義需要以begin tran語句作為開始。如果想提交事務,則應該以commit tran語句顯式結束事務;如果不想提高事務,則以rollback tran語句顯式結束事務。
如果不顯式定義事務邊界,sqlserver會預設把每一條語句作為乙個事務。
事務必須有四種屬性:原子性,一致性,隔離性,永續性。
原子性:在事務中進行的修改,要麼全部執行,要麼全不執行。如果在事務完成之前系統出現故障,sqlserver會撤銷在事務中的修改。
一致性:為了事務在查詢和修改時資料不發生衝突。
隔離性:隔離性是一種用於控制資料訪問的機制,能夠確保事務只能訪問處於期望的一致性級別下的資料。sqlserver使用鎖對各個事務之間正在修改和查詢的資料進行隔離。
永續性:在將資料修改寫入到磁碟之前,總是先把這些修改寫入到事務日誌中。這樣子,即使資料還沒有寫入到磁碟中,也可以認為事務是持久化的。這是如果系統重新啟動,sql server也會檢查資料庫日誌,進行恢復處理。
-----------------------2021-06-25更新-----------------------
一致性:在事務開始時和事務結束後,系統的資源保持一致;例如:你在超市花10元買了塊巧克力,你的錢包裡少了10元錢,但口袋裡卻多了塊巧克力;超市的庫存少了1塊巧克力,資產卻多了10元錢;
隔離性:乙個事務直到它被提交,它的結果對於其他的事務才可見;例如:你的總資產為20元,你在超市花10元買了塊巧克力,然後出門做的士要花20元,這是有先後順序的,買了巧克力後資產少了10元,後坐車發現錢不夠,無法坐車;或者買巧克力後想想還是算了,就出門坐車,這個是可行的,這個隔離性表現在買巧克力和支付車費這兩件事(事務)上面
永續性:乙個事務提交後會儲存在硬碟或者其他什麼介質中,總之不會因為斷電,斷網,火災,**等因素丟失,但這個也是相對而言的;
鎖
sql server使用鎖來實施事務隔離屬性。
鎖是事務獲取資源的一種控制資源,用於保護資料資源。放置其他事務對資料進行衝突或不相容訪問。
排他鎖:當試圖修改資料時,事務會為所依賴的資料資源請求排他鎖。一旦授予,事務將一直持有排他鎖,直至事務完成。
共享鎖:當試圖讀取資料時,事務缺省會為所依賴的資料資源請求共享鎖,讀操作一完成,就立即釋放資源上的共享鎖。這種模式下,多個事務可以同時持有同一資源上的共享鎖。
事務之間的相互制約關係就是鎖的相容性。
用簡單的話來總結一下事務之間鎖的相互制約關係:如果資料正在由乙個事務進行修改,其他事務就既不能修改也不能讀取(至少預設不能)該資料,知道第乙個事務完成。如果資料正由另乙個事務讀取,其他事務就不能修改該資料(至少預設不能),但可以讀取。
可鎖定資源的型別
sql server可以鎖定不同型別或粒度的資源,這些資源型別包括row id或key(行),page(頁),物件(如表),資料庫等。行位於頁中,而頁則是包含在表或索引資料的物理資料塊。
為了獲得特定資源型別上的鎖,事務必須先在更高粒度級別上獲得相同模式的意向鎖。例如,為了獲得某一行上的排他鎖,事務必須現在那一行的頁上獲得意向排他鎖,並在包含那一頁的資料物件上獲得意向排他鎖。
意向鎖的目的是為了在較高的粒度級別上有效檢測不相容的鎖定要求,防止不相容的鎖。
sql server動態決定應該鎖定哪種型別的資源。自然,為了獲得良好的併發性,最好是只鎖定需要的資源,即只鎖定受影響的哪些行。
資料庫 什麼是事務?
1 事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性。2 事務通常是以begin transaction開始,以commit或...
什麼是資料庫事務
事務是一組邏輯操作單元 包含乙個或多個dml操作 使資料從一種狀態變換到另一種狀態 保證所有的事務都做為乙個工作單元來執行,即使出現了故障,都不能改變這種執行方式。當乙個事務中執行多個操作時,要麼所有事務都被提交 commit 那麼這些修改就永久的儲存下來 要麼 資料庫管理系統 將放棄所有所做的修改...
什麼是資料庫事務?
事務是作為乙個邏輯單元執行的一系列操作,要麼一起成功,要麼一起失敗。乙個邏輯工作單元必須有四個屬性,稱為 acid 原子性 一致性 隔離性和永續性 屬性,只有這樣才能成為乙個事務。原子性 事務必須是原子工作單元 對於其資料修改,要麼全都執行,要麼全都不執行。一致性 事務在完成時,必須使所有的資料都保...