事務的性質:
原子性:同一個事務中的所有操作要不然全部成功要不然全部失敗
一緻性:一緻性是指事務必須使資料庫從一個一緻性狀态變換到另一個一緻性狀态,,也就是說一個事務執行之前和執行之後都必須處于一緻性狀态。
隔離性:隔離性是當多個使用者并發通路資料庫時,比如操作同一張表時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作所幹擾,多個并發事務之間要互相隔離。
持久性:持久性是指一個事務一旦被送出了,那麼對資料庫中的資料的改變就是永久性的
不考慮事務的隔離性會出現的問題:
髒讀:髒讀是指在一個事務處理過程裡讀取了另一個未送出的事務中的資料。
不可重複讀:不可重複讀是指在對于資料庫中的某個資料,一個事務範圍内多次查詢卻傳回了不同的資料值,這是由于在查詢間隔,被另一個事務修改并送出了。
虛度:例如事務T1對一個表中所有的行的某個資料項做了從“1”修改為“2”的操作,這時事務T2又對這個表中插入了一行資料項,而這個資料項的數值還是為“1”并且送出給資料庫。而操作事務T1的使用者如果再檢視剛剛修改的資料,會發現還有一行沒有修改,其實這行是從事務T2中添加的,就好像産生幻覺一樣,這就是發生了幻讀。
事務的隔離級别:
Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生
Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生
Read committed (讀已送出):可避免髒讀的發生
Read uncommitted (讀未送出):最低級别,任何情況都無法保證
索引
資料庫中索引的作用是用來加快查找速度,原理是将表中建立索引列的資料獨立出來用特殊的資料結構存儲,(如B-Tree,Hash),資料庫實作通常使用B樹和B+樹
索引相當于字典的目錄,可以通過查找目錄來得到我們所需要的資料所在的位置,而不需要翻整本字典.
使用索引需要注意的問題
索引會帶來額外的開銷,額外的存儲空間,額外的建立時間,額外維護時間,是以要選擇适合的情況去建立索引
索引的類型
1. 普通索引:普通索引允許被索引的資料列包含重複的值。
2. 唯一索引:被索引包含的資料列不允許有相同的值, 可以包含null
3. 主鍵索引:主鍵建立的索引,唯一且不能為空,
4. 全文索引(mysql):
5. 聚集索引 : 該索引中鍵值的邏輯順序決定了表中相應行的實體順序。 (比如字典的按照拼音查詢 邏輯順序和實體順序一緻),一個表中隻能有一個聚集索引
6. 非聚集索引 : 該索引中索引的邏輯順序與磁盤上行的實體存儲順序不同。(比如字典中的按部首查詢 一個字可能在54頁有可能在554頁)(mysql中沒有)
适合建立索引的字段:
1. 經常搜尋
2. 經常排序
3. 經常跟在Where語句後面
4. 資料類型小
5. 簡單資料類型
6. 列中盡量避免null