資料庫常用性知識總結
阿新 • • 發佈:2021-08-16
資料庫常用性知識總結
什麼是資料庫事務?
資料庫事務,是獨立執行,並且可併發呼叫,並且事務具有頭唯一性,一致性。
基本性質
- 原子性:要麼執行,要麼不執行
- 一致性:只有合法資料才可以被寫入
- 隔離性:每一個事務都是獨立的,可以併發去執行某一個事務
- 永續性: 事務結束之後,處理解決必須固化,一旦事務被提交,對資料庫的改變是永久的。redis不支援,事務回滾
事務語句:
1、開始事務 begin transaction
2、提交事務 commit transaction
3、回滾事務 rollbask transaction
資料庫鎖機制
資料庫併發大的話,就要考慮鎖和鎖的效能問題,如果不控制的話,則會產生死鎖。
鎖機制就是在保證一個事務在沒釋放鎖之前,其它事務是不能提交更改的。
鎖型別
- 悲觀鎖 :假設一個事務操作之前,防止資料衝突,會上鎖,不讓其它事務回修改資料並訪問這個某個資料。悲觀鎖會增加資料庫的開銷,會增加死鎖的發生,還會降低並行,一旦資料鎖定,後面的人必須排隊。
//0.開始事務 begin; //1.查詢出商品庫存資訊 select quantity from items where id=1 for update ; //2.修改商品庫存為2 update items set quantity=2 where id = 1; //3.提交事務 一般情況事務是自動提交的,如果有問題會自動回滾事務 commit;
以上,在對id = 1的記錄修改前,先通過for update的方式進行加鎖,然後再進行修改。這就是比較典型的悲觀鎖策略
-
樂觀鎖 :在悲觀鎖的基礎上,認為資料一般不會衝突,只有在資料提交更新的時候,才會去校驗資料是否衝突,如衝突了,會返回錯誤資訊給使用者,讓使用者子判斷怎麼處理,它就不管了。
-
共享鎖 :簡單來說就是共享,你能訪問到它的資源,我也能訪問
-
排它鎖 : 如果我已經加鎖了,別人就不能加了