阿里面試官必問的12個MySQL數據庫基礎知識,哪些你還不知道?

數據庫基礎知識

  • 爲何要使用數據庫
  • 什麼是SQL?
  • 什麼是MySQL?
  • 數據庫三大範式是什麼
  • mysql有關權限的表都有哪幾個
  • MySQL的binlog有有幾種錄入格式?分別有什麼區別?

數據類型

  • mysql有哪些數據類型

引擎

  • MySQL存儲引擎MyISAM與InnoDB區別
  • MyISAM索引與InnoDB索引的區別?
  • InnoDB引擎的4大特性
  • 存儲引擎選擇

數據庫基礎知識

爲何要使用數據庫mysql

(1)數據保存在內存程序員

優勢: 存取速度快面試

缺點: 數據不能永久保存sql

(2)數據保存在文件數據庫

優勢: 數據永久保存安全

缺點:服務器

1)速度比內存操做慢,頻繁的IO操做。併發

2)查詢數據不方便函數

(3)數據保存在數據庫性能

1)數據永久保存

2)使用SQL語句,查詢方便效率高。

3)管理數據方便

什麼是SQL?

結構化查詢語言(Structured Query Language)簡稱SQL,是一種數據庫查詢語言。

做用:用於存取數據、查詢、更新和管理關係數據庫系統。

什麼是MySQL?

MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。MySQL 是最流行的關係型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件之一。在Java企業級開發中很是經常使用,由於 MySQL 是開源免費的,而且方便擴展。

數據庫三大範式是什麼

第一範式:每一個列都不能夠再拆分。

第二範式:在第一範式的基礎上,非主鍵列徹底依賴於主鍵,而不能是依賴於主鍵的一部分。

第三範式:在第二範式的基礎上,非主鍵列只依賴於主鍵,不依賴於其餘非主鍵。

在設計數據庫結構的時候,要儘可能遵照三範式,若是不遵照,必須有足夠的理由。好比性能。事實上咱們常常會爲了性能而妥協數據庫的設計。

MySQL有關權限的表都有哪幾個

MySQL服務器經過權限表來控制用戶對數據庫的訪問,權限表存放在mysql數據庫裏,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。下面分別介紹一下這些表的結構和內容:歡迎關注公種浩:程序員追風,領取一線大廠Java面試題總結+各知識點學習思惟導圖+一份300頁pdf文檔的Java核心知識點總結!

  • user權限表:記錄容許鏈接到服務器的用戶賬號信息,裏面的權限是全局級的。
  • db權限表:記錄各個賬號在各個數據庫上的操做權限。
  • table_priv權限表:記錄數據表級的操做權限。
  • columns_priv權限表:記錄數據列級的操做權限。
  • host權限表:配合db權限表對給定主機上數據庫級操做權限做更細緻的控制。這個權限表不受GRANT和REVOKE語句的影響。

MySQL的binlog有有幾種錄入格式?分別有什麼區別?

有三種格式,statement,row和mixed。

  • statement模式下,每一條會修改數據的sql都會記錄在binlog中。不須要記錄每一行的變化,減小了binlog日誌量,節約了IO,提升性能。因爲sql的執行是有上下文的,所以在保存的時候須要保存相關的信息,同時還有一些使用了函數之類的語句沒法被記錄複製。
  • row級別下,不記錄sql語句上下文相關信息,僅保存哪條記錄被修改。記錄單元爲每一行的改動,基本是能夠所有記下來可是因爲不少操做,會致使大量行的改動(好比alter table),所以這種模式的文件保存的信息太多,日誌量太大。
  • mixed,一種折中的方案,普通操做使用statement記錄,當沒法使用statement的時候使用row。

此外,新版的MySQL中對row級別也作了一些優化,當表結構發生變化的時候,會記錄語句而不是逐行記錄。

數據類型

mysql有哪些數據類型

一、整數類型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分別表示1字節、2字節、3字節、4字節、8字節整數。任何整數類型均可以加上UNSIGNED屬性,表示數據是無符號的,即非負整數。

長度:整數類型能夠被指定長度,例如:INT(11)表示長度爲11的INT類型。長度在大多數場景是沒有意義的,它不會限制值的合法範圍,只會影響顯示字符的個數,並且須要和UNSIGNED ZEROFILL屬性配合使用纔有意義。

例子,假定類型設定爲INT(5),屬性爲UNSIGNED ZEROFILL,若是用戶插入的數據爲12的話,那麼數據庫實際存儲數據爲00012。

二、實數類型,包括FLOAT、DOUBLE、DECIMAL。

DECIMAL能夠用於存儲比BIGINT還大的整型,能存儲精確的小數。

而FLOAT和DOUBLE是有取值範圍的,並支持使用標準的浮點進行近似計算。

計算時FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你能夠理解成是用字符串進行處理。

三、字符串類型,包括VARCHAR、CHAR、TEXT、BLOB

VARCHAR用於存儲可變長字符串,它比定長類型更節省空間。

VARCHAR使用額外1或2個字節存儲字符串長度。列長度小於255字節時,使用1字節表示,不然使用2字節表示。

VARCHAR存儲的內容超出設置的長度時,內容會被截斷。

CHAR是定長的,根據定義的字符串長度分配足夠的空間。

CHAR會根據須要使用空格進行填充方便比較。

CHAR適合存儲很短的字符串,或者全部值都接近同一個長度。

CHAR存儲的內容超出設置的長度時,內容一樣會被截斷。

使用策略:

對於常常變動的數據來講,CHAR比VARCHAR更好,由於CHAR不容易產生碎片。

對於很是短的列,CHAR比VARCHAR在存儲空間上更有效率。

使用時要注意只分配須要的空間,更長的列排序時會消耗更多內存。

儘可能避免使用TEXT/BLOB類型,查詢時會使用臨時表,致使嚴重的性能開銷。

四、枚舉類型(ENUM),把不重複的數據存儲爲一個預約義的集合。

有時可使用ENUM代替經常使用的字符串類型。

ENUM存儲很是緊湊,會把列表值壓縮到一個或兩個字節。

ENUM在內部存儲時,其實存的是整數。

儘可能避免使用數字做爲ENUM枚舉的常量,由於容易混亂。

排序是按照內部存儲的整數

五、日期和時間類型,儘可能使用timestamp,空間效率高於datetime,

用整數保存時間戳一般不方便處理。

若是須要存儲微妙,可使用bigint存儲。

看到這裏,這道真題是否是就比較容易回答了。

引擎

一、MySQL存儲引擎MyISAM與InnoDB區別

存儲引擎Storage engine:MySQL中的數據、索引以及其餘對象是如何存儲的,是一套文件系統的實現。

經常使用的存儲引擎有如下:

  • Innodb引擎:Innodb引擎提供了對數據庫ACID事務的支持。而且還提供了行級鎖和外鍵的約束。它的設計的目標就是處理大數據容量的數據庫系統。歡迎關注公種浩:程序員追風,領取一線大廠Java面試題總結+各知識點學習思惟導圖+一份300頁pdf文檔的Java核心知識點總結!
  • MyIASM引擎(本來Mysql的默認引擎):不提供事務的支持,也不支持行級鎖和外鍵。
  • MEMORY引擎:全部的數據都在內存中,數據的處理速度快,可是安全性不高。

二、MyISAM與InnoDB區別

三、MyISAM索引與InnoDB索引的區別?

  • InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
  • InnoDB的主鍵索引的葉子節點存儲着行數據,所以主鍵索引很是高效。
  • MyISAM索引的葉子節點存儲的是行數據地址,須要再尋址一次才能獲得數據。
  • InnoDB非主鍵索引的葉子節點存儲的是主鍵和其餘帶索引的列數據,所以查詢時作到覆蓋索引會很是高效。

四、InnoDB引擎的4大特性

  • 插入緩衝(insert buffer)
  • 二次寫(double write)
  • 自適應哈希索引(ahi)
  • 預讀(read ahead)

五、存儲引擎選擇

若是沒有特別的需求,使用默認的Innodb便可。

MyISAM:以讀寫插入爲主的應用程序,好比博客系統、新聞門戶網站。

Innodb:更新(刪除)操做頻率也高,或者要保證數據的完整性;併發量高,支持事務和外鍵。好比OA自動化辦公系統。

最後歡迎你們一塊兒交流,喜歡文章記得關注我點個贊喲,ganxe感謝支持

相關文章
相關標籤/搜索