前言:
學霸與學渣的區別在哪裡,我見過最常見的說法就是說學霸有學習方法,而學渣就盲目地去學。作為一個學渣,我其實也有一套學習方法:
揣著問題去學習,讓學習過程成為去尋找答案的過程。
所以接下來我在開始這篇文章之前給大家一個問題,就是:
學程序最開始第一步應該學習什麼?
程序之道為之三千大道矣,但凡修者皆至簡,萬法之本築基為根本。
修道者,程序修道者以語法練體,算法為之練氣,實為道之根本。
其中程序大道又分為前端,後端,移動嵌入式三種流派組成。
萬法遵循本根,根者數據也,資料庫之法實為萬法之源,正所謂萬丈高樓平地起,資料庫之法,實在為重中之重。
資料庫之法,基礎篇分為新增,刪除,更新,查詢,但凡修程序道友皆有所知之。
然卻多者只精於皮表,其中之理多為道不明言不清。
今者謂之寒季,不通不精不明其理者,呼之悲嘆無路。當下時,恰為築基之時,免受寒冬之劫,切不可心浮意躁。
以上都是廢話。
正文
大家都知道軟體程序的核心是數據,管理數據驅動的就是資料庫,曾經不知道在哪裡聽說這麼一句話,就是說學習SQL是最划算的,因為SQL語句一次學習終生受用。我們常見的資料庫:
常用資料庫.png
接下來我就談談怎麼去學習資料庫,資料庫學習的本質就是對數據進行增刪改查,增刪改查屬於數據存儲模塊,另外一塊的學習就是數據統計。
首先我們先來了解資料庫表的結構:
結構.png
常用初級語法
上面我們知道關於數據的操作分為存儲與統計兩大類,儲存的手段也是我們對資料庫最常見的操作,接下來我們先看看存儲大概有哪些手段吧。
基礎動作
基礎動作.png
我一直都覺得學習程序第一步就是學習單詞,誰說做IT會不會英語可以,我絕對跟他急。在數據的操作中除了了解了他的基本操作,同時還有協同操作的相關子句,所以接下我們學幾個單詞:
常用子句.png
所有有編程基礎的同學都知道,程序的本質就是邏輯與運算,所以資料庫裡面也有大家熟知的朋友——運算符。
數據常見運算符.png
資料庫中沿用了大家在程序中常用的操作運算符,所以學習起來也更加得心應手。
資料庫設計
前面說完了那麼多的基礎知識,學會了那麼多的單詞,SQL也是一種編程,編程最主要的還得是思想,在數據中最考究的就是資料庫的設計問題,為此關於資料庫還有一個專門的職業——資料庫架構師,下面是boss直聘上關於資料庫架構師的招聘:
資料庫架構師.PNG
接下來我就從個人理解上,談談怎麼去設計資料庫。
設計資料庫就需要系統思維,將生活中的某一項或多項業務用數據分解出來,並且儘可能將它所有可能有關係元素關聯起來,這個怎麼講呢,就是多提問題,這裡就需要5W1H問題思維方式,再來剔除其他不必要元素。
六合分析法.png
接下來我們就拿最常見的商品為例:
商品六合分析.png
通過這種方式我們就可以對商品進一步分析,再把商品進一步與其他事物進行關聯,從而就產生了電子商城資料庫
注意事項
1.mysql,mariaDB中的uft8非真正的utf8,應該選擇utf8mb4,因為mysql uft-8每個字符只支持最多3個字符,而真正的utf8卻支持最多4個字符,所以得選擇uft8mb4.
2.查詢數據時,如果使用全表掃描會嚴重影響查詢性能與速度,儘可能避免全表查詢從而導致查詢性能下降,合理使用索引可以很大優化查詢,如在 where 及 order by 涉及的列上建立索引。當需要對查詢數據做為NULL判斷時,請優先使用NOT NULL,如果使用IS NULL會導致引擎放棄使用索引而進行全表掃描。
其他優化注意事項
結語
雖然現在各種簡化SQL的操作層出不窮,但是我們也不能放棄SQL的學習。框架一直在變,不變的只有原理與底層,只要我們掌握底層技術,不管未來還有多少網際網路寒冬我們都將不會畏懼。
光說不練都是扯淡,最後我給新手準備了一些適合於1-5年以上開發經驗的java程式設計師面試涉及到的絕大部分面試題及答案做成了文檔和學習筆記文件以及架構視頻資料免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高並發等架構技術資料),希望可以幫助到大家。