堅持看到最後的孩子有彩蛋
數據保存在內存
優點:存取速度快
缺點:數據不能永久保存
數據保存在文件
優點:數據永久保存
缺點:速度比內存操作慢,頻繁的IO操作;查詢數據不方便
數據保存在資料庫
1)數據永久保存
2)使用SQL語句,查詢方便效率高。
3)管理數據方便
結構化查詢語言(Structured Query Language)簡稱SQL,是一種資料庫查詢語言。
作用:用於存取數據、查詢、更新和管理關係資料庫系統
3)什麼是MySQL?MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。
MySQL 是最流行的關係型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。
在Java企業級開發中非常常用,因為 MySQL 是開源免費的,並且方便擴展。
4)資料庫三大範式是什麼?第一範式:每個列都不可以再拆分。
第二範式:在第一範式的基礎上,非主鍵列完全依賴於主鍵,而不能是依賴於主鍵的一部分。
第三範式:在第二範式的基礎上,非主鍵列只依賴於主鍵,不依賴於其他非主鍵。
在設計資料庫結構的時候,要儘量遵守三範式,如果不遵守,必須有足夠的理由。比如性能。事實上我們經常會為了性能而妥協資料庫的設計。
5)mysql有關權限的表都有哪幾個?MySQL伺服器通過權限表來控制用戶對資料庫的訪問,權限表存放在mysql資料庫裡,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。下面分別介紹一下這些表的結構和內容:
user權限表:記錄允許連接到伺服器的用戶帳號信息,裡面的權限是全局級的。
db權限表:記錄各個帳號在各個資料庫上的操作權限。
table_priv權限表:記錄數據表級的操作權限。
columns_priv權限表:記錄數據列級的操作權限。
host權限表:配合db權限表對給定主機上資料庫級操作權限作更細緻的控制。這個權限表不受GRANT和REVOKE語句的影響。
6)MySQL的binlog有有幾種錄入格式?分別有什麼區別?有三種格式,statement,row和mixed。
此外,新版的MySQL中對row級別也做了一些優化,當表結構發生變化的時候,會記錄語句而不是逐行記錄。
數據類型
1)mysql有哪些數據類型?1、整數類型,包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分別表示1位元組、2位元組、3位元組、4位元組、8位元組整數。
任何整數類型都可以加上UNSIGNED屬性,表示數據是無符號的,即非負整數。
長度:整數類型可以被指定長度,例如:INT(11)表示長度為11的INT類型。長度在大多數場景是沒有意義的,它不會限制值的合法範圍,只會影響顯示字符的個數,而且需要和UNSIGNED ZEROFILL屬性配合使用才有意義。
例子,假定類型設定為INT(5),屬性為UNSIGNED ZEROFILL,如果用戶插入的數據為12的話,那麼資料庫實際存儲數據為00012。
2、實數類型,包括FLOAT、DOUBLE、DECIMAL。
DECIMAL可以用於存儲比BIGINT還大的整型,能存儲精確的小數。
而FLOAT和DOUBLE是有取值範圍的,並支持使用標準的浮點進行近似計算。
計算時FLOAT和DOUBLE相比DECIMAL效率更高一些,DECIMAL你可以理解成是用字符串進行處理。
3、字符串類型,包括VARCHAR、CHAR、TEXT、BLOB
VARCHAR用於存儲可變長字符串,它比定長類型更節省空間。
VARCHAR使用額外1或2個字節存儲字符串長度。列長度小於255位元組時,使用1位元組表示,否則使用2位元組表示。
VARCHAR存儲的內容超出設置的長度時,內容會被截斷。
CHAR是定長的,根據定義的字符串長度分配足夠的空間。
CHAR會根據需要使用空格進行填充方便比較。
CHAR適合存儲很短的字符串,或者所有值都接近同一個長度。
CHAR存儲的內容超出設置的長度時,內容同樣會被截斷。使用策略:
對於經常變更的數據來說,CHAR比VARCHAR更好,因為CHAR不容易產生碎片。
對於非常短的列,CHAR比VARCHAR在存儲空間上更有效率。
使用時要注意只分配需要的空間,更長的列排序時會消耗更多內存。
儘量避免使用TEXT/BLOB類型,查詢時會使用臨時表,導致嚴重的性能開銷。
4、枚舉類型(ENUM),把不重複的數據存儲為一個預定義的集合。
有時可以使用ENUM代替常用的字符串類型。
ENUM存儲非常緊湊,會把列表值壓縮到一個或兩個字節。
ENUM在內部存儲時,其實存的是整數。
儘量避免使用數字作為ENUM枚舉的常量,因為容易混亂。
排序是按照內部存儲的整數
5、日期和時間類型,儘量使用timestamp,空間效率高於datetime,用整數保存時間戳通常不方便處理。
如果需要存儲微妙,可以使用bigint存儲。
看到這裡,這道真題是不是就比較容易回答了。
常用SQL語句
數據定義語言DDL(Data Ddefinition Language)CREATE,DROP,ALTER
主要為以上操作 即對邏輯結構等有操作的,其中包括表結構,視圖和索引。
數據查詢語言DQL(Data Query Language)SELECT
這個較為好理解 即查詢操作,以select關鍵字。各種簡單查詢,連接查詢等 都屬於DQL。
數據操縱語言DML(Data Manipulation Language)INSERT,UPDATE,DELETE
主要為以上操作 即對數據進行操作的,對應上面所說的查詢操作 DQL與DML共同構建了多數初級程式設計師常用的增刪改查操作。而查詢是較為特殊的一種 被劃分到DQL中。
數據控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK
主要為以上操作 即對資料庫安全性完整性等有操作的,可以簡單的理解為權限控制等。
2)超鍵、候選鍵、主鍵、外鍵分別是什麼?超鍵:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。超鍵包含候選鍵和主鍵。
候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。
主鍵:資料庫表中對儲存數據對象予以唯一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能為空值(Null)。
外鍵:在一個表中存在的另一個表的主鍵稱此表的外鍵。
3)SQL 約束有哪幾種?NOT NULL: 用於控制欄位的內容一定不能為空(NULL)。
UNIQUE: 控制項欄位內容不能重複,一個表允許有多個 Unique 約束。
PRIMARY KEY: 也是用於控制項欄位內容不能重複,但它在一個表只允許出現一個。
FOREIGN KEY: 用於預防破壞表之間連接的動作,也能防止非法數據插入外鍵列,因為它必須是它指向的那個表中的值之一。
CHECK: 用於控制欄位的值範圍。
4)六種關聯查詢
SELECT * FROM A,B(,C)或者SELECT * FROM A CROSS JOIN B (CROSS JOIN C)#沒有任何關聯條件,結果是笛卡爾積,結果集會很大,沒有意義,很少使用內連接(INNER JOIN)SELECT * FROM A,B WHERE A.id=B.id或者SELECT * FROM A INNER JOIN B ON A.id=B.id多表中同時符合某種條件的數據記錄的集合,INNER JOIN可以縮寫為JOIN內連接分為三類
外連接(LEFT JOIN/RIGHT JOIN)
左外連接:LEFT OUTER JOIN, 以左表為主,先查詢出左表,按照ON後的關聯條件匹配右表,沒有匹配到的用NULL填充,可以簡寫成LEFT JOIN
右外連接:RIGHT OUTER JOIN, 以右表為主,先查詢出右表,按照ON後的關聯條件匹配左表,沒有匹配到的用NULL填充,可以簡寫成RIGHT JOIN
聯合查詢(UNION與UNION ALL)
SELECT * FROM A UNION SELECT * FROM B UNION ...全連接(FULL JOIN)
SELECT * FROM A LEFT JOIN B ON A.id=B.id UNIONSELECT * FROM A RIGHT JOIN B ON A.id=B.id5)學習MYSQL推薦書籍
SQL必知必會 (豆瓣)
推薦理由:這本書的特點就在於擺脫了傳統的大段理論,直接教你一些語句的寫法和用法,非常有利於初學者上手
《SQL基礎教程》(豆瓣)
推薦理由:非常好的SQL基礎教材,不掉書袋,脫離現實,慢慢看跟著做絕對沒問題
最後附上菊廠的2分鐘了解雲資料庫MySQL
31個驚豔的數據可視化作品,讓你感受「數據之美」!
怎麼獲得各行業的數據?這30個網站強烈建議收藏!
2021年,做數據分析還有前景嗎?
統計學思維導圖!附下載連結
阿里、招行、華為三家大廠數據分析面經