在国产在线视频a在线视频,国产欧美一区二区三区网站,国内精产品一二二三的区别,国产日韩精品91

    <s id="gmbiu"></s>

        <sup id="gmbiu"><thead id="gmbiu"><input id="gmbiu"></input></thead></sup>
        <strike id="gmbiu"></strike>

        管理員登陸

        《MySQL必知必會》讀書筆記

        前言

        ? 第一次完整的技術書籍的讀書筆記,這本書200多頁,看起來輕松又簡單,當然因為內容本身非?;A的緣故,這本書我也只是翻了一遍,等接觸到具體內容的時候可以拿起來再看看,看這本書的意義就在于此。

        資源鏈接:
        鏈接:https://pan.baidu.com/s/1RnsH_-HjTCgKOKlxWg4dTg 
        提取碼:6nta 
        --來自百度網盤超級會員V6的分享
        推薦語

        ? 這本書十分的基礎,適合沒有學過數據庫的小白學習,當然不要過于糾結版本特性,只需要了解基本的sql操作即可。這本書可以讓新手快速上手mysql,非常典型的一本入門指導書。

        ? 對于已經熟悉mysql的人,這本書可以作為回顧使用,包括mysql里面基本內容以及需要學習的重點,后續(xù)介紹的觸發(fā)器,存儲過程,游標等內容可能可能會覺得平時工作用的不多但是其實也是十分重要的內容。

        ? 當然這本書不建議購買實體書。買個電子版的翻一翻還是不錯的,有種快速學會一本書所有內容的暢快感。

        個人評價

        ? 這本書從新手入門的角度可以說是一本很適合的書,講的內容是非?;A但是可以讓你剛好入門的程度,翻起來也不會十分的痛苦,同時在內容的編排方面也是典型的由淺入深,這本書 沒有什么廢話,基本就是直接用案例告訴你sql如何使用,對于新手來說是特別友好的一本書。

        ? 另外說明一下書中介紹的mysql5.1是非常老的版本,所以舊版本的特性完全不建議深入學習,而是應該多看看mysql5.5之后的版本新特性,當然如果公司有遺留項目使用低版本的mysql,這里有些內容還是有一定的參考價值的(僅適用于mysql5.1)。

        內容概要

        ? 實操大于理論的一本書,這里提一些日常比較容易忽略的一些點:

        尾空格的like

        ? 一條記錄存儲的格式如下,如果此時寫入一條如下的查詢條件like %anvil是不會匹配上第二條記錄的,因為尾部空格的緣故,導致第二條記錄是檢索不到的,這里的解決辦法是可以使用trim()函數或者寫成%anvil%的方式:

        prod_id | prod_name
        a1          2 ton anvil
        a2          4 ton anvil[空格]
        a3          1 ton anvil

        ? 其實這種錯誤只要入庫的時候數據進行嚴格的處理一般不會出什么問題,這里引申一下java中一個還算比較容易犯的錯誤:

        @Test
        public void test() {
        
            Map<String, Object> map = new HashMap<>();
            map.put(" a1", "test1");
            map.put("a3", "test3");
            map.put("a2", "test2");
            System.out.println(map.get("a1"));
        }/*運行結果:
        null
        
        */

        ? 不知道碰到這種BUG的人有多痛苦,個人沒有碰到過,但是曾經給同事排查問題的發(fā)現了類似的情況,當然不是這么明顯的錯,而是由于前端傳遞的時候,json當中的key前面多了一個空格,也是因為這個空格,導致花了好幾個小時才排查出來!這里希望讀者引以為戒,在編寫類似代碼時候嚴格檢查有沒有手賤多敲空格。

        and和or的優(yōu)先級問題:

        ? 有時候我們會寫出這樣的sql:

        select * from t_user where name = 'xxx' or age > 18 and email like '@qq.com'

        ? 這里根據優(yōu)先級的就近匹配原則,百分之百的會出現意想不到的情況,因為此時mysql會誤認為是下面這樣的情況,進行查詢之后,數據肯定和我們預想的or條件不一致了:

        select * from t_user where name = 'xxx' or (age > 18 and email like '@qq.com')

        ? 要修復這段程序很簡單就是把or查詢的條件包裹起來:

        select * from t_user where (name = 'xxx' or age > 18) and email like '@qq.com'

        ? 所以不管是編程語言還是sql,都需要小心這種操作符優(yōu)先級帶來的莫名其妙的問題。

        不能沒有的where條件

        ? 不論是select,update,insert,delete那個操作,最應該關注的是有沒有where條件,可能有人會覺得select影響會稍微小一些?

        ? 大錯特錯,加入select一張全表特別是select *一個表所有的內容并且通過反射映射到程序當中的時候,甚至會導致 內存溢出,并且這種事情是真實發(fā)生過的事情。

        ? 另外提一個建議是mybatis編寫一些插件對于查詢語句進行掃描,排查沒有where條件的sql并且不允許執(zhí)行。

        ? 上面扯遠了,總之,不管是平時練習還是自己上手干活的時候,一定要確保可以觸發(fā)where條件。

        小心NULL值

        ? null這個值大概是所有人痛恨的一個東西,然而也是十分重要的一個值,在數據庫操作的時候尤其需要小心,因為某些函數比如count(),sum()、min()、max()等函數是不會統(tǒng)計null的數據的,這很容易造成統(tǒng)計數據的錯誤。

        逗號的陷阱

        ? 逗號也是非常容易犯錯的一個點,當一條sql幾十上百行的時候,如果那里寫錯一個逗號排查難度可想而知,當然mysql給的提示多數情況能發(fā)現問題,但是更多的時候會給出一些莫名其妙的錯誤,報錯的結果和真實的錯誤相差甚遠,所以建議每寫一點sql就應該馬上運行一下,查看一下逗號是否寫錯,以及是否寫多或者語法的問題。

        ? 寫了一大段的sql語句并且自我感覺良好運行的時候,這種錯誤尤其容易出現。

        having和where的區(qū)別

        ? 書中的介紹非常的簡潔易懂,這里直接摘抄了:where在數據分組之前進行過濾,having在數據分組之后進行過濾。where排除的行不包含在分組中,這容易改變計算值,從而影響having的計算結果。

        NOT語句的限制

        ? mysql的Not語句限制比較大,只能和in、between、exists語句進行匹配,不像其他某些的sql語言可以對于判斷條件進行取反

        = NULL 和 IS NULL

        ? 老生常談的一個話題,這里不要去糾結,mysql中判斷字段內容是否為null就應該使用 is null,使用 = null 容易出現意想不到的結果。

        Rtrim 和 Ltrim 語句

        ? 除了基本的trim函數,mysql還支持刪除數據左邊的空格或者右邊的空格,還是挺方便的,這里也記錄到了筆記上面。

        更新和刪除的指導原則:

        ? 好的建議總是讓人忍不住點贊,這里也同樣記錄:

        • 除非全表更新或者刪除,否則總是使用where條件更新或者刪除
        • 保證每一個表都有主鍵,盡量使用主鍵關聯刪除,因為主鍵索引的效率十分高
        • 在where條件更新或者刪除之前,先用SELECT實驗一遍。不要對自己的sql過于自信
        • 對于一些關鍵數據進行表強制關聯引用,防止誤刪除。這一點可能很難做到,因為現代多數設計很少使用外鍵而是使用冗余字段+業(yè)務去處理的。
        更快的刪表方法TRUNCATE

        ? 書中給了一個特殊的刪表方法,這個還真用的不多,他的格式如下,不建議隨便亂用,如果小心把重要數據表干了這里表示不負責哈......

        ? 這個刪除的原理其實是把整個表干掉,然后直接重新建立一個表,有點類似neo4j圖數據的操作.....

         TRUNCATE table task_log

        ? 現實情況下其實是完全不推薦使用delete去大批量的刪除數據,很容易造成資源占用和線程的阻塞(涉及數據結構和底層設計的原理,原因很復雜不做擴展)。也有一些線上庫是禁止DELETE的或者在設計的層面上引入 假刪除,這里也不做過多擴展,總之DELETE操作能少用就少用。

        建表的時候盡量使用not null

        ? 又是這個深惡痛絕的null,有些數據表的設計會默認給一個值,哪怕他確實沒有任何數據也要填充一個''空字符串進去,至于原因這里忘了,總之是null對于索引有很重要的影響,容易讓索引失效?總之,數據最好都有意義,沒有意義就給個默認值是最好的。

        總結

        ? 如果沒有mysql或者sql基礎,這本書算是最值得推薦的入門書籍,沒有之一,個人當年學習數據庫是用的一些垃圾培訓機構的書,寫的又啰嗦還全是圖片,后面跑去看培訓機構的視頻才真正看懂......

        寫到最后

        ? 寫筆記的時候回過頭又看了一遍,確實是一本值得推薦的好書,好拿讀起來也十分的輕松。


        來源:https://www.52pojie.cn/thread-1485555-1-1.html

        信息科技 2021-07-31 01:03:48 通過 網頁 瀏覽(2873) 打印

        共有0條評論!

        發(fā)表評論