MySQL數(shù)據(jù)庫(kù)基礎(chǔ)培訓(xùn)筆記

1、SQL中的字符串都要用單引號(hào)

不用單引號(hào)也可能會(huì)執(zhí)行,但是會(huì)有類型轉(zhuǎn)換,而類型轉(zhuǎn)換設(shè)計(jì)函數(shù)操作,引起索引失效或邏輯錯(cuò)誤的問(wèn)題。

2、SQL書(shū)寫(xiě)順序和邏輯順序要一致

  • order by要放在句末
  • select a,b from t order by c ,c不在select項(xiàng)中,數(shù)據(jù)庫(kù)引擎是怎么處理的?
    MySQL進(jìn)行數(shù)據(jù)的邏輯存儲(chǔ),以page為單位,會(huì)抽取所有數(shù)據(jù)。
  • select id1 as fid from t where fid = 2 能執(zhí)行嗎?
    不能;執(zhí)行順序是先where,再select。

3、內(nèi)連接與外鏈接

  • 內(nèi)聯(lián)接(典型的聯(lián)接運(yùn)算,使用像 = 或 <> 之類的比較運(yùn)算符)
    包括相等聯(lián)接和自然聯(lián)接。
    內(nèi)聯(lián)接使用比較運(yùn)算符根據(jù)每個(gè)表共有的列的值匹配兩個(gè)表中的行。例如,檢索 students和courses表中學(xué)生標(biāo)識(shí)號(hào)相同的所有行。

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

  • 考慮這個(gè)SQL語(yǔ)句:

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

這個(gè)語(yǔ)句沒(méi)有意義:因?yàn)閍2作為左表,數(shù)據(jù)項(xiàng)都會(huì)被顯示,而count將每次都得到相同的結(jié)果。

  • 外鏈接的內(nèi)部處理方式:(可以從擴(kuò)展執(zhí)行計(jì)劃中查看具體的執(zhí)行過(guò)程,類似于單步調(diào)試)
    有where條件的left join查詢,內(nèi)部將以內(nèi)連接處理。

4、語(yǔ)法細(xì)節(jié)

  • update同時(shí)更新多條,以逗號(hào)“,”將update的值分隔,一并執(zhí)行:

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

  • truncate和delete *
    truncate是原子事務(wù),沒(méi)有日志記錄(或者說(shuō)只有一條語(yǔ)句執(zhí)行的日志),所以不能進(jìn)行事務(wù)回滾。
    delete操作將產(chǎn)生詳細(xì)的日志,IO頻繁,支持事務(wù)回滾。

5、Quanr數(shù)據(jù)庫(kù)命名規(guī)范

庫(kù)、表、字段命名
  • 必須使用小寫(xiě)字母,并采用下劃線分割;
  • 不超過(guò)32個(gè)字符;
  • 必須見(jiàn)名知意,與事務(wù)、產(chǎn)品線相關(guān);
  • 禁用MySQL保留字;
  • 臨時(shí)表以tmp_做前綴,日期做后綴,如:tmp_hourse_xxx_20170301
  • 備份表以bak_做前綴,日期做后綴,如:bak_hourse_xxx_20170301
索引命名
  • 小寫(xiě)字母,下劃線分割,禁用駝峰式;
  • 非唯一索引:idx_字段名稱[_字段名稱]
  • 唯一索引:uniq_字段名稱[_字段名稱]

6、Quanr數(shù)據(jù)操作基礎(chǔ)規(guī)范

  • 使用INNODB存儲(chǔ)引擎并且使用業(yè)務(wù)不相關(guān)自增ID為主鍵;
  • 使用UTF8 / UTFMB4字符集;
  • 所有表、字段都要加注釋;
  • 禁止在數(shù)據(jù)庫(kù)中存放圖片、文件等;
  • 每張數(shù)據(jù)表數(shù)據(jù)量控制在5000W以內(nèi);
  • 禁止在線上做數(shù)據(jù)庫(kù)壓力測(cè)試;
  • 禁止從測(cè)試、開(kāi)發(fā)環(huán)境直連數(shù)據(jù)庫(kù)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容