數據庫基礎知識
- 爲何要使用數據庫
- 什麼是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感謝支持