mysql的基礎知識--面試點常問

MySQL這款數據庫因爲是開源免費的所以在國內大部分的項目組採用的都是MySQL這款數據庫。面試中也是經常問到MySQL的一些常見問題
知道的回爐一下,不知道的正好學習一些;

1、數據庫的設計三範式

第一範式:每個表都應該有主鍵,並且每個字段要求原子性不可再分
第二範式:建立在第一範式基礎之上。所有非主鍵字段必須完全依賴於主鍵不能產生部分依賴。
第三範式:建立在第二範式基礎之上,所有非主鍵字段必須直接依賴於主鍵不能產生傳遞依賴
作用 : 遵守數據庫設計三範式的要求來設計表結構,能夠減少數據的冗餘,但是實際項目開發中中,我們以滿足客戶的需求爲主,有時也會拿冗餘來換取速度。

二、事務的隔離級別

讀未提交(read uncommitted):
這種隔離級別最低,一般都是隻停留在理論上,實際的數據庫一般都是至少二擋起步。
這種隔離級別存在的問題是:髒讀現象(dirty read)
對方事務沒有提交的數據,我方事務可以讀取到,稱之爲讀到了髒數據。
讀已提交(read committed):
這種隔離級別是多數數據庫的默認隔離級別,比較具有代表的就是oracle。
這種隔離級別表示對方事務提交之後,我方事務纔可以讀取到數據。
這種隔離級別解決了髒讀現象,那麼它存在什麼問題呢?
這種隔離級別存在“不可重複讀”現象。(不可重複讀表示:在當前事務還未結束的時候,第一次讀到的數據和第二次讀到的數據不一樣。)
這種隔離級別每一次讀取到的數據都是真實的,因爲都是對方提交之後的數據,
真實的每一次讀取的是硬盤文件中的數據。
可重複讀(repeatable read):
			對方事務提交之後的數據,我方還是讀不到。
			採用這種隔離級別可以保證:只要當前事務沒結束,讀到的數據永遠都是一樣的。第一次讀取和第二次讀取的結果完全相同。
			這種隔離級別解決了“不可重複讀”問題,那麼它存在什麼問題呢?
				存在幻象讀問題,讀到數據不是真實的,是幻象。
序列化讀/串行化讀(serializable)
			事務A與事務B不能併發,只能排隊。這種隔離級別最高,效率最低。數據最安全。
		解決了所有的問題。

oracle默認的隔離級別是二擋起步:讀已提交(read committed)
mysql默認的事務隔離級別是三擋起步:可重複讀(repeatable read)

三、事務的特性ACID

原子性(A)  、 一致性(C) 、 隔離性(I) 、 持久性(D)

1、原子性表示事務是最小的執行工作單元不可再分。
2、一致性表示事務必須同時成功或者同時失敗。
3、隔離性表示事務之間的隔離,及兩事務之間互不干擾。
4、持久性是事務最終結束的保障。

四、存儲引擎

存儲引擎是MySQL提出的概念,其它數據庫都沒有這個說法,但是有類似的機制,Oracle沒有特殊的稱謂,一般叫做 “ 表的存儲方式”。
MySQL給一張表指定存儲引擎是在create建表語句的時候使用,“Engine = 存儲引擎的名字”來給表指定。默認是InnoDB.

//查看MySQL支持哪些存儲引擎:
mysql> show engines \G
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章