比如點讚收藏一篇文章,我要對該文章的權重值進行乙個增加(增大其流量**率,優先顯示該文章),所以我們進行點讚收藏,資料庫對齊點讚數,收藏數進行累加的同時,我們對權重值也要增加。也就是說,它們是一起的,如果有異常,我們對其點了贊,讚數已經寫到資料庫後怕丟擲了異常,但是權重值沒有增加怎麼辦?
所以我們需要引入事務!
什麼是事務呢?一般指計算機想做的事情,乙個程式執行的單位。由事務開始到事務結束之間的全體操作組成。滿足acid的一組操作。
原子性 : 事務是乙個不可分割的整體。要麼全部成功,要麼全部失敗。
一致性 : 事務在執行前後都保持一致性,也就是說,所有事務,對同乙個資料讀取的結果是一樣的。
隔離性 : 事務之間,互不影響。(事務執行之前,對其它事務是不可見的)
永續性 : 提交到資料庫中之後,永久存在,事務執行的結果不丟失。
併發與隔離不可兼得?
引發四大問題!既然有這四大問題,我們就要採取措施。
mysql中提供了兩種封鎖粒度: 行級鎖(對行進行封鎖) 和 表級鎖(對整張表)
1. 讀寫鎖
兩個規定:
**封鎖型別
為了解決併發事務的問題,就有了隔離級別未提交讀 : 解決丟失修改的問題,如果事務讀,其它就不能寫,沒有加s鎖,事務未提交,別人就能讀,故有髒讀問題。提交讀 : 可以解決髒讀問題,加了行級的鎖,讀完之後,釋放鎖。有不可重複讀的問題。(由於讀完後馬上釋放鎖,其它事務可以修改,再讀取的時候資料不一致)
可重複讀 : 相當於事務鎖,讀完之後,事務結束才釋放鎖,不會產生重複讀取資料不一致的現象但是會出現幻讀問題
序列化 : 事務序列化執行,毫無併發可言,效率低下。解決了幻讀問題。
資料庫設計正規化概要
在邏輯設計中,對於同乙個實體的儲存,可以有多種不同的設計的方式。比如使用者實體跟購物車實體,可以將使用者資訊和購物車資訊儲存在同一張表中,也可以分別儲存在不同的表中。兩種方式哪一種更好一些呢?實際上就要通過一些,資料庫設計的一些規範來進行選擇,這也就是資料庫設計的正規化。符合規範所設計的資料庫 不符...
Oracle資料庫體系架構概要
oracle資料庫系統是乙個複雜的軟體系統。所謂oracle的體系架構,是指oracle資料庫管理系統的的組成部分和這些組成部分之間的相互關係,包括記憶體結構 後台程序 物理與邏輯結構等。下圖為oracle資料庫體系總體圖 oracle資料庫的體系很複雜,複雜的原因在於它最大限度的節約記憶體,從上圖...
資料庫原理
基本內容 acid與cap 資料庫事務可能引發的問題 資料庫鎖的型別 封鎖協議 兩段鎖協議 資料庫隔離級別 mvcc的實現步驟 mysql事務如何實現 資料庫鎖如何實現 xa兩段提交協議。1.acid是資料庫事務正確執行的四個基本要素 原子性 事務是資料庫併發控制的最小單位,要麼全部提交成功,要麼全...