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