java開發中的重中之重-------mysql(基礎篇)

  • 介紹:

  mysql是目前世界上最流行的關係型數據庫,在國內大的互聯網公司都在使用mysql數據庫,mysql常常被咱們這樣概述,「mysql是輕量級關係型數據庫」,其實輕量級並非說mysql是中小型數據庫,在項目開發中,存儲數據的量每每是一個架構問題,若是配合架構,mysql也是能夠存儲海量數據的。而且海量數據並無一個明確的標準。說mysql是輕量級關係型數據庫,緣由是mysql不擅長對海量數據的分析。在通常的互聯網公司海量數據並不常見,所以mysql是中小型公司的最佳選擇。mysql

  • mysql的查詢執行過程:在開發中常常用到mysql進行數據查詢,那麼mysql的查詢執行過程是什麼樣的呢?
  1. 首先鏈接mysql發佈查詢
  2. 先去查詢緩存中是否有結果集,若是有則直接返回結果集
  3. 若是沒有結果集,那麼mysql解析查詢將經過優化器生產執行計劃,而後運行執行計劃經過API從存儲引擎獲取數據,並返回給客戶端
  • 存儲引擎:下面主要介紹下經常使用引擎的特性(一共有20多個引擎)
  1. InnoDB引擎:在mysql5.5版本之後的版本中,InnoDB是mysql的默認引擎,在近幾年的版本更新中,InnoDB一直在持續改進,處理能力不斷提升,下面看一下InnoDB的優點
    1. 災難恢復性好
    2. 支持所有級別的事物(一共四種事物),其中默認事物隔離級別是可重複讀
    3. 使用行級鎖
    4. 支持外鍵
    5. 支持熱備份
  2. MyISAM引擎:
    1. 無事物支持
    2. 使用的是表級鎖,併發性差
    3. 主機宕機後,MyISAM表易損壞,災難恢復性不佳
    4. 只緩存索引

  以上兩種索引的注意區別:InnoDB讀取數據的速度遠遠小於MyISAM,可是MyISAM的寫入數據遠小於InnoDB面試

  • mysql函數:
  1. 算數操做符:+ 、-、*、/、DIV(整除)
  2. 數學函數:
    • 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語法(簡單的就不講了,主要講一下經常使用的錶鏈接)
  1. 等值鏈接(inner  join):也叫內鏈接,把全部表裏出現的數據所有鏈接起來
  2. 左鏈接(left join):左鏈接就是左表中的全部數據按字段匹配右表中的數據,新表包括左表中的全部字段,若是匹配不到右表中的數據用空表示
  3. 右鏈接(right join):右鏈接與左鏈接相似,就是右表中的數據按字段匹配左表中的字段,新表包括右表中的全部字段,若是匹配不到左表中的數據用空表示
  • 索引(作開發這麼長時間,我認爲索引在mysql中是比較重要的存在,特別是面試的時候容易被問到)

mysql主要支持的幾種索引:B樹索引(B-tree)、散列索引(hash)、空間索引(R-tree)、全文索引(full-text)。這裏主要講一下B樹索引(B-tree)。下面講一下索引的場景及注意事項:緩存

  1. 何種查詢能夠應用索引

    (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(索引列),那麼能夠進行直接定位。

  • 持續更新:

一、數據庫的大小寫敏感須要設置,包括字段、字段值、數據表、數據庫等

相關文章
相關標籤/搜索