資料庫,尤其是關系型資料庫,是程式員日常使用最多的,對優秀的工程師來講,只會 CRUD 還不夠,還需要理解其原理,理解其原理能夠讓程式員寫出更加可靠高效的代碼,并能夠提升解決實際問題的能力,本篇文章將以 MySQL為例,和大家一起學習資料庫原理,
資料庫基礎知識
1. 為什么要使用資料庫
資料保存在記憶體
優點:存取速度快
缺點:資料不能永久保存
資料保存在檔案
優點:資料永久保存
缺點:1)速度比記憶體操作慢,頻繁的IO操作 2)查詢資料不方便
資料保存在資料庫
1)資料永久保存 2)使用SQL陳述句,查詢方便效率高 3)管理資料方便
2. 什么是SQL?
結構化查詢語言(Structured Query Language)簡稱SQL,是一種資料庫查詢語言,作用:用于存取資料、查詢、更新和管理關系資料庫系統,
3. 什么是MySQL?
MySQL是一個關系型資料庫管理系統,由瑞典MySQL AB 公司開發,屬于 Oracle 旗下產品,MySQL 是最流行的關系型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系資料庫管理系統) 應用軟體之一,在Java企業級開發中非常常用,因為 MySQL 是開源免費的,并且方便擴展,
- 資料庫三大范式是什么
- mysql有關權限的表都有哪幾個
- MySQL的binlog有有幾種錄入格式?分別有什么區別?
- …
由于篇幅有限,這里省略掉一部分,有需要完整版的朋友可以點一點下方鏈接
鏈接:1103806531暗號:CSDN
資料型別
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存盤,
看到這里,這道真題是不是就比較容易回答了,
引擎
- MySQL存盤引擎MyISAM與InnoDB區別
- MyISAM與InnoDB區別
- MyISAM索引與InnoDB索引的區別?
- InnoDB引擎的4大特性
- 存盤引擎選擇
- …
索引
- 什么是索引?
- 索引有哪些優缺點?
- 索引使用場景(重點)
- 索引有哪幾種型別?
- 索引的資料結構(b樹,hash)
- 索引的基本原理
- …
最后
希望這篇文章對大家有幫助!
由于篇幅有限,事務、鎖、視圖、存盤程序與函式、觸發器、常用SQL陳述句、SQL優化、資料庫優化等內容沒有在這篇文章中展示,但我這邊都整理成了檔案,包括架構師全套視頻教程和關于java的系統化資料,有需要的朋友可以點一點下方鏈接領取
鏈接:1103806531暗號:CSDN

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/109424.html
標籤:其他
