mysql是目前世界上最流行的關係型數據庫,在國內大的互聯網公司都在使用mysql數據庫,mysql常常被咱們這樣概述,「mysql是輕量級關係型數據庫」,其實輕量級並非說mysql是中小型數據庫,在項目開發中,存儲數據的量每每是一個架構問題,若是配合架構,mysql也是能夠存儲海量數據的。而且海量數據並無一個明確的標準。說mysql是輕量級關係型數據庫,緣由是mysql不擅長對海量數據的分析。在通常的互聯網公司海量數據並不常見,所以mysql是中小型公司的最佳選擇。mysql
- mysql的查詢執行過程:在開發中常常用到mysql進行數據查詢,那麼mysql的查詢執行過程是什麼樣的呢?
- 首先鏈接mysql發佈查詢
- 先去查詢緩存中是否有結果集,若是有則直接返回結果集
- 若是沒有結果集,那麼mysql解析查詢將經過優化器生產執行計劃,而後運行執行計劃經過API從存儲引擎獲取數據,並返回給客戶端
- 存儲引擎:下面主要介紹下經常使用引擎的特性(一共有20多個引擎)
- InnoDB引擎:在mysql5.5版本之後的版本中,InnoDB是mysql的默認引擎,在近幾年的版本更新中,InnoDB一直在持續改進,處理能力不斷提升,下面看一下InnoDB的優點
- 災難恢復性好
- 支持所有級別的事物(一共四種事物),其中默認事物隔離級別是可重複讀
- 使用行級鎖
- 支持外鍵
- 支持熱備份
- MyISAM引擎:
- 無事物支持
- 使用的是表級鎖,併發性差
- 主機宕機後,MyISAM表易損壞,災難恢復性不佳
- 只緩存索引
以上兩種索引的注意區別:InnoDB讀取數據的速度遠遠小於MyISAM,可是MyISAM的寫入數據遠小於InnoDB面試
- 算數操做符:+ 、-、*、/、DIV(整除)
- 數學函數:
-
- ABS(X):X的絕對值
- CEIL(X):返回不小於X的最小整數值
- FLOOR:返回不大於X的最大整數值
3.字符類型處理函數sql
-
- CHAR_LENGTH(str):返回值爲字符串str的長度,長度單位爲字符
- LENGTH(str):返回值爲字符串str的長度,單位爲字節
- CONCAT(str1,str2):返回結果是str1和str2拼接產生的字符串
- LEFT(str,len):返回從左邊開始len個字符,相反RIGHT(str,len)
- SUBSTRING(str,pos)、SUBSTRING(str,pos,len):pos是起始字符串
- LOWER(str):返回字符串str轉化爲小寫字母的字符,相反UPPER(str)
4.日期格式數據庫
-
- NOW():返回當前日期和時間的值,格式是‘YYYY-MM-DD HH:MM:SS’
- CURTIME():將當前時間以‘HH:MM:SS’的格式返回
- CURDATE():將當前時間以‘YYYY-MM-DD’格式返回
- DATEDIFF(expr1,expr2)返回兩個如期之間相隔的天數
- STR_TO_DATE(str,format):String轉日期類型
- mysql語法(簡單的就不講了,主要講一下經常使用的錶鏈接)
- 等值鏈接(inner join):也叫內鏈接,把全部表裏出現的數據所有鏈接起來
- 左鏈接(left join):左鏈接就是左表中的全部數據按字段匹配右表中的數據,新表包括左表中的全部字段,若是匹配不到右表中的數據用空表示
- 右鏈接(right join):右鏈接與左鏈接相似,就是右表中的數據按字段匹配左表中的字段,新表包括右表中的全部字段,若是匹配不到左表中的數據用空表示
- 索引(作開發這麼長時間,我認爲索引在mysql中是比較重要的存在,特別是面試的時候容易被問到)
mysql主要支持的幾種索引:B樹索引(B-tree)、散列索引(hash)、空間索引(R-tree)、全文索引(full-text)。這裏主要講一下B樹索引(B-tree)。下面講一下索引的場景及注意事項:緩存
- 何種查詢能夠應用索引
(1)、mysql目前僅支持前導列mysql優化
篩選記錄的條件應能組成複合索引最左邊的部分,即按照最左前綴的原則進行篩選,例如:idx_a_b_c,那麼只有where時條件必須按照a=? and b=? and c=? 複合索引纔有效架構
(2)、索引列上的範圍查找(where ... between ... and ...或者>、<等範圍操做時,那麼可能用到索引的範圍查找。在通常的的操做中,應避免大範圍索引範圍查找,若是索引範圍查找的成本過高,那麼數據庫可能會選擇全表掃描)併發
(3)、join列:在聯合查詢a表和b表時,若a爲驅動表,那麼數據庫可能會全表掃描a表,而後用a表的每一個id探測b表的索引查找匹配的記錄函數
(4)、where子句:優化
舉例子就一目瞭然:複合索引idx_a_b_c_d
where a=? and b=? and c>10000; 這種狀況能夠用到a_b_c複合索引
where a=? and b=? and c>10000 and d<10000; 這種狀況d的索引是用不到的
where a>10000 and b=? and c=? and d=?; 這種狀況只有a的範圍查找,其餘bcd的索引是用不到的
(5)、mysql優化器
mysql優化器會作一些特殊優化,好比對於索引查找MAX(索引列),那麼能夠進行直接定位。
一、數據庫的大小寫敏感須要設置,包括字段、字段值、數據表、數據庫等