MySQL數據庫基礎培訓筆記

1、SQL中的字符串都要用單引號

不用單引號也可能會執行,但是會有類型轉換,而類型轉換設計函數操作,引起索引失效或邏輯錯誤的問題。

2、SQL書寫順序和邏輯順序要一致

  • order by要放在句末
  • select a,b from t order by c ,c不在select項中,數據庫引擎是怎么處理的?
    MySQL進行數據的邏輯存儲,以page為單位,會抽取所有數據。
  • select id1 as fid from t where fid = 2 能執行嗎?
    不能;執行順序是先where,再select。

3、內連接與外鏈接

  • 內聯接(典型的聯接運算,使用像 = 或 <> 之類的比較運算符)
    包括相等聯接和自然聯接。
    內聯接使用比較運算符根據每個表共有的列的值匹配兩個表中的行。例如,檢索 students和courses表中學生標識號相同的所有行。

  • 外聯接
    外聯接可以是左向外聯接、右向外聯接或完整外部聯接。
    在 FROM子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定:
    1)LEFT JOIN或LEFT OUTER JOIN
    左向外聯接的結果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。
    2)RIGHT JOIN 或 RIGHT OUTER JOIN
    右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
    3)FULL JOIN 或 FULL OUTER JOIN
    完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。

  • 考慮這個SQL語句:

    select count(*) from a2 left join b2 on a2.id = b2.id
    

這個語句沒有意義:因為a2作為左表,數據項都會被顯示,而count將每次都得到相同的結果。

  • 外鏈接的內部處理方式:(可以從擴展執行計劃中查看具體的執行過程,類似于單步調試)
    有where條件的left join查詢,內部將以內連接處理。

4、語法細節

  • update同時更新多條,以逗號“,”將update的值分隔,一并執行:

    update a1 set a = 1,b = 2 where ...
    
  • delete from t where id;
    可以正常執行:id有值的數據都滿足。

  • truncate和delete *
    truncate是原子事務,沒有日志記錄(或者說只有一條語句執行的日志),所以不能進行事務回滾。
    delete操作將產生詳細的日志,IO頻繁,支持事務回滾。

5、Quanr數據庫命名規范

庫、表、字段命名
  • 必須使用小寫字母,并采用下劃線分割;
  • 不超過32個字符;
  • 必須見名知意,與事務、產品線相關;
  • 禁用MySQL保留字;
  • 臨時表以tmp_做前綴,日期做后綴,如:tmp_hourse_xxx_20170301
  • 備份表以bak_做前綴,日期做后綴,如:bak_hourse_xxx_20170301
索引命名
  • 小寫字母,下劃線分割,禁用駝峰式;
  • 非唯一索引:idx_字段名稱[_字段名稱]
  • 唯一索引:uniq_字段名稱[_字段名稱]

6、Quanr數據操作基礎規范

  • 使用INNODB存儲引擎并且使用業務不相關自增ID為主鍵;
  • 使用UTF8 / UTFMB4字符集;
  • 所有表、字段都要加注釋;
  • 禁止在數據庫中存放圖片、文件等;
  • 每張數據表數據量控制在5000W以內;
  • 禁止在線上做數據庫壓力測試;
  • 禁止從測試、開發環境直連數據庫。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容