現在JAVA開發人員一般都需要會主流數據庫。開發人員需要對MySQL、Oracle、SqlServer這三個常用的熟悉了解。本次著重分享Mysql數據庫的知識點,感興趣的同學可以先收藏,再觀看!
如果需要Oracle、SqlServer數據庫知識點的分享,可以在文章底部留言告訴我。
文章目錄:
- 請簡潔描述 MySQL 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區別?
- 在 MySQL 中 ENUM 的用法是什么?
- CHAR 和 VARCHAR 的區別?
- 列的字符串類型可以是什么?
- MySQL 中使用什么存儲引擎?
- TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數據類型上做什么?
- 主鍵和候選鍵有什么區別?
- MySQL 數據庫服務器性能分析的方法命令有哪些?
- LIKE 和 REGEXP 操作有什么區別?
- BLOB 和 TEXT 有什么區別?
- 數據庫的三范式?
- MySQL 表中允許有多少個 TRIGGERS?
- 什么是通用 SQL 函數?
- MySQL 中有哪幾種鎖?
- MySQL 數據優化。
1. 請簡潔描述 MySQL 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區別?
SQL 標準定義的四個隔離級別為: read uncommited :讀到未提交數據 read committed:臟讀,不可重復讀 repeatable read:可重讀 serializable :串行事物
2. 在 MySQL 中 ENUM 的用法是什么?
ENUM 是一個字符串對象,用于指定一組預定義的值,并可在創建表時使用。 SQL 語法如下: Create table size(name ENUM('Smail,'Medium','Large');
3. CHAR 和 VARCHAR 的區別?
CHAR 和 VARCHAR 類型在存儲和檢索方面有所不同。 CHAR 列長度固定為創建表時聲明的長度,長度值范圍是 1 到 255。 當 CHAR 值被存儲時,它們被用空格填充到特定長度,檢索 CHAR 值時需刪除尾隨 空格。
4. 列的字符串類型可以是什么?
字符串類型是: SET BLOB ENUM CHAR TEXT VARCHAR
5. MySQL 中使用什么存儲引擎?
存儲引擎稱為表類型,數據使用各種技術存儲在文件中。 技術涉及: Storage mechanism Locking levels Indexing Capabilities and functions.
6. TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數據類型上做什么?
創建表時 TIMESTAMP 列用 Zero 更新。只要表中的其他字段發生更改,UPDATE CURRENT_TIMESTAMP 修飾符就將時間戳字段更新為當前時間。
7. 主鍵和候選鍵有什么區別?
表格的每一行都由主鍵唯一標識, 一個表只有一個主鍵。 主鍵也是候選鍵。按照慣例,候選鍵可以被指定為主鍵,并且可以用于任何外鍵引 用。
8. MySQL 數據庫服務器性能分析的方法命令有哪些?
Show status 一些值得監控的變量值: Bytesreceived 和 Bytessent 和服務器之間 來往的流量。 Com 服務器正在執行的命令。 Created 在查詢執行期限間創建的臨時 表和文件。 Handler 存儲引擎操作。 Select 不同類型的聯接執行計劃。 Sort_* 幾 種排序信息。 Show session status like ‘Select’; Show profiles SET profiling=1; Show profilesG Show profile;
9. LIKE 和 REGEXP 操作有什么區別?
LIKE 和 REGEXP 運算符用于表示 ^ 和%。 SELECT * FROM WHERE * REGEXP "^b"; SELECT * FROM WHERE * LIKE "%b";
10. BLOB 和 TEXT 有什么區別?
BLOB
BLOB 是一個二進制對象,可以容納可變數量的數據。有四種類型的 BLOB:
- TINYBLOB
- BLOB
- MEDIUMBLOB
- LONGBLOB
它們只能在所能容納價值的最大長度上有所不同。
TEXT
TEXT 是一個不區分大小寫的 BLOB。四種 TEXT 類型:
- TINYTEXT
- TEXT
- MEDIUMTEXT
- LONGTEXT
它們對應于四種 BLOB 類型,并具有相同的最大長度和存儲要求。 BLOB 和 TEXT 類型之間的唯一區別在于對 BLOB 值進行排序和比較時區分大小 寫,對 TEXT 值不區分大小寫。
11. 數據庫的三范式?
第一范式:數據庫表的每一個字段都是不可分割的。
第二范式:數據庫表中的非主屬性只依賴于主鍵。
第三范式:不存在非主屬性對關鍵字的傳遞函數依賴關系。
12. MySQL 表中允許有多少個 TRIGGERS?
在 MySQL 表中允許有六個觸發器,如下:
- BEFORE INSERT
- AFTER INSERT
- BEFORE UPDATE
- AFTER UPDATE
- BEFORE DELETE
- AFTER DELETE
13. 什么是通用 SQL 函數?
數學函數
- Abs(num)求絕對值
- floor(num)向下取整
- ceil(num)向上取整
字符串函數
- insert (s1,index,length,s2) 替換函數
- S1 表示被替換的字符串
- S2 表示將要替換的字符串
- Index 表示被替換的位置, 從 1 開始
- Lebgth 表示被替換的長度
- upper(str),ucase(str)將字母改為大寫
- lower(str),lcase(str)將字母改為小寫
- left(str,length)返回 str 字符串的前 length 個字符
- right(str,length)返回 str 字符串的后 length 個字符
- substring(str,index,length)返回 str 字符串從 index 位開始長度為 length 個字符(index 從 1 開始)
- reverse(str)將 str 字符串倒序輸出
日期函數
- curdate()、current_date( ) 獲取當前日期
- curtime()、current_time( ) 獲取當前日期
- now()獲取當前日期和時間
- datediff(d1、d2)d1 和 d2 之間的天數差
- adddate(date,num)返回 date 日期開始,之后 num 天的日期
- subdate(date,num)返回 date 日期開始,之前 num 天的日期
聚合函數
- Count(字段)根據某個字段統計總記錄數(當前數據庫保存到多少條數據)
- sum(字段)計算某個字段的數值總和
- avg(字段)計算某個字段的數值的平均值
- Max(字段)、min(字段)求某個字段最大或最小值
14. MySQL 中有哪幾種鎖?
MyISAM 支持表鎖,InnoDB 支持表鎖和行鎖,默認為行鎖。
表級鎖:開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖沖突的概率最高,并 發量最低。
行級鎖:開銷大,加鎖慢,會出現死鎖。鎖力度小,發生鎖沖突的概率小,并發度最 高。
15. MySQL 數據優化。
- 優化數據類型
- 避免使用 NULL,NULL 需要特殊處理, 大多數時候應該使用 NOT NULL,或者使用一個特殊的值,如 0,-1 作為默認值。
- 僅可能使用更小的字段,MySQL 從磁盤讀取數據后是存儲到內存中 的,然后使用 cpu 周期和磁盤 I/O 讀取它,這意味著越小的數據類 型占用的空間越小.
- 小心字符集轉換
- 客戶端或應用程序使用的字符集可能和表本身的字符集不一樣,這需要 MySQL 在運行過程中隱含地進行轉換,此外,要確定字符集如 UTF8 是否支持多字節字符,因此它們需要更多的存儲空間。
- _優化 count(mycol) 和 count()*
- 優化子查詢
- 遇到子查詢時,MySQL 查詢優化引擎并不是總是最有效的,這就是為 什么經常將子查詢轉換為連接查詢的原因了,優化器已經能夠正確處理 連接查詢了,當然要注意的一點是,確保連接表 (第二個表) 的連接列 是有索引的,在第一個表上 MySQL 通常會相對于第二個表的查詢子 集進行一次全表掃描,這是嵌套循環算法的一部分。
- 優化 UNION
- 在跨多個不同的數據庫時使用 UNION 是一個有趣的優化方法, UNION 從兩個互不關聯的表中返回數據,這就意味著不會出現重復的 行,同時也必須對數據進行排序,我們知道排序是非常耗費資源的,特 別是對大表的排序。
- UNION ALL 可以大大加快速度,如果你已經知道你的數據不會包括重 復行,或者你不在乎是否會出現重復的行,在這兩種情況下使用 UNION ALL 更適合。此外,還可以在應用程序邏輯中采用某些方法避 免出現重復的行,這樣 UNION ALL 和 UNION 返回的結果都是一樣 的,但 UNION ALL 不會進行排序。