4-24 acid 資料庫四大特性
a:原子性(atomicity),要麼做完,要麼不做,舉個例子,a給b轉錢,不會出現a轉了錢,b沒有收到錢
c:一致性(consistency),從乙個狀態到另乙個狀態是一致的,再舉個例子,a給b轉錢,不會出現a轉了100塊,b只得到了50塊.
i:隔離性(isolation),乙個事務在未提交之前,對其他事務來說,是不可見的,這裡有四個隔離等級.
d:持續性(durabilty),一旦事務提交,將會將會永遠儲存在資料庫裡.
4-24 四個隔離等級 & 髒讀 不可重複讀 幻讀
分別為讀未提交,讀提交,可重複讀,序列化,讀未提交 什麼也防不了,讀提交防髒讀,可重複讀在讀提交的基礎上還能防止不可重複讀,序列化在可重複讀的基礎上,還能防止幻讀.
下面來說說 什麼是髒讀,不可重複讀,幻讀
髒讀,乙個事務讀取了另乙個事務未提交的資料. 舉個例子,a要給b100塊,但是沒提交事務,這個時候b去看看自己的支付寶,多了100塊,但是a想了想,還是不給了,就沒有提交.雖然b看到多了100塊,但是實際100塊錢也沒有得到.
不可重複讀,乙個事務讀取了資料的時候,另乙個事務在update或者delete,再次讀取的時候,資料讀取不同. 舉個例子,a看了看自己的支付寶有100塊錢,想去買東西準備付錢,這個時候b從a的支付寶裡轉走了100塊,並在a付賬前(提交事務)轉走,這個時候,a認為自己是有錢的,但是卻支付失敗.
幻讀,乙個事務讀取資料的時候,另乙個事務執行insert,再次讀取的時候,發現讀取資料不同,舉個例子,a在看支付寶消費記錄的時候,b用a的支付寶消費了100塊,a重新整理支付寶消費記錄的時候,突然多了100塊,他認為自己出現了幻覺.
四個隔離等級,依次效率降低,降低併發性.
4-25 樂觀鎖與悲觀鎖
樂觀鎖與悲觀鎖,我想了想,還是放到了資料庫相關知識裡.
樂觀鎖:假定不會發生併發衝突,所以在所需資料之外,還需要乙個版本號version,來確定當前做出的修改,在儲存的時候,是否是基於上乙個版本的.樂觀鎖的優點又是不會用資料庫大量資源,適合併發的環境.但是這是有條件的,這僅僅是針對寫操作較少的情況下.如果一直版本號不對應(也就是寫操作過,導致版本號更新過快),那麼占用的資源不一定比悲觀鎖少.cas就是一種樂觀鎖.
悲觀鎖,正好與樂觀鎖相反,是一種假定會發生併發衝突的鎖.所以,在修改資料前,它首先會取得鎖,讓其他事務暫時無法取得它所取得的資料.這樣會占用資料庫大量資源.synchronized就是一種悲觀鎖.
4-27 資料庫鎖機制
資料庫鎖有三種表級,頁級,行級,三種鎖的併發能力依次由小到大遞增.
表級:是對訪問資料所在表加鎖,這樣粒度雖然變大,但是也降低了併發能力.
行級:對訪問資料加鎖,這樣雖然降低了發生衝突的可能,但是因為粒度小,對資料的加鎖解鎖也對資料庫效率造成一定影響.
頁級:鎖機制在表級和行級之間,併發能力和資料庫效率都處於表級和行級之間.
5-8 mysql索引失效
1. 當使用is null
2. 使用like進行模糊查詢
3. 使用不等於 (!= <>)
4. 當mysql估計全表查詢比使用索引快的時候
5. 查詢字串的時候 沒有使用單引號
資料庫基本知識
記錄集的游標型別 forwardonly指標一直向下走.移動速度快,但是不能儲存走過的記錄.資源占用少.主要運用在服務端.static 相當於造了乙個一摸一樣的副本.不管資料庫怎麼改,都是改的副本.真正的資料沒有改.最後直接 更新到真正的資料庫.靜態適合只是讀取資料庫中的資料.比如查詢.但編輯不適合...
資料庫基本知識
語句 1 語法 select 列名稱 from 表名稱 或 select from 表名稱 2,sqlcreate 語句 1 sql createtable語句 1 語法 create table 表名稱 列名稱1,資料型別,列名稱2,資料型別,列名稱3,資料型別 2 sql creatindex ...
資料庫基本知識
第二正規化 在滿足第一正規化的基礎上,要有主鍵,從而可以通過該主鍵定位到該行記錄,並且確保記錄的唯一性 主鍵不能重複 第三正規化 消除傳遞依賴,通俗講就是去除冗餘 消除冗餘應該比較好理解一些,就是各種資訊只在乙個地方儲存,不出現在多張表中。比如說大學分了很多系 中文系 英語系 計算機系 這個系別管理...