有關資料庫的基礎知識就都在這裡了
今天面試,資料庫好多忘了,面試官還逮著問,尷尬得不行,準備好好整理一下相關基礎的知識
一、表的基本構成
主鍵(primary key):表中某一個屬性組合能唯一標識一條記錄,該屬性組就是一個主鍵
外來鍵(foreign key):在一個表中存在的另一個表的主鍵為此表的外來鍵
超鍵(super key):在關係中能唯一標識元組的屬性集稱為關係模式的超鍵
候選鍵(candidate key):不含有多餘屬性的超鍵稱為候選鍵
增刪改查就完事
四、資料庫事務
資料庫事務,即資料庫執行的功能的過程,等同於作業系統當中的程序,為了讓事務能夠順利準確的完成,需要實現四個特性
1.原子性
原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,不可能停滯在中間環節。
2.一致性
一致性指一個事務執行之前和執行之後都必須處於一致性狀態,比如A向B轉賬,不可能A扣了錢,B卻沒收到。
3.隔離性
同一時間,只允許一個事務請求同一資料,不同的事務之間彼此沒有任何干擾。
4.永續性
永續性是指一個事務對資料庫中的資料的改變是永久性的,不能回滾。
事務存在的問題
1.髒讀:一個事務處理過程裡讀取了另一個未提交的事務中的資料。
2.不可重複讀:事務 A 讀取一資料,事務 B 在事務A讀取的過程中對資料作了更新,導致事務A多次讀取資料時結果不一致。
3.虛讀:事務 A 修改表資料,事務 B 在事務A修改的過程中插入一條新資料,導致事務A像是沒有修改完一樣。
解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表
MySQL事務隔離級別
事務隔離級別 | 髒讀 | 不可重複讀 | 幻讀 |
讀未提交(read-uncommitted) | 是 | 是 | 是 |
讀提交(read-committed) | 否 | 是 | 是 |
可重複讀(repeatable-read) | 否 | 否 | 是 |
序列化(serializable) | 否 | 否 | 否 |
serializable:通過給每個資料行與表上鎖,強行讓事務的處理序列化,可以解決三大問題但也會導致大量超時與鎖競爭現象,故而不常用。
repeatable-read:開始讀取資料(事務開啟)時,不再允許修改操作,可以解決不可重複讀問題但還存在幻讀現象。
read-committed:就是一個事務要等另一個事務提交後才能讀取資料,只能解決髒讀問題。
read-uncommitted:沒用,啥也幹不了。
MySQL資料庫中預設的隔離級別為Repeatable read (可重複讀)。
在MySQL資料庫中檢視當前和設定事務的隔離級別:
select @@tx_isolation;
set [glogal | session] transaction isolation level 隔離級別名稱;
set tx_isolation=’隔離級別名稱;’