5-10年的DBA如何獨當一面?這10個建議送給你(附圖書工具推薦)
一、學SQL的苦惱
二、SQL 的原理
SQL 的原理,超級簡單,四個字,集合運算。
所有複雜的 SQL 語句,命令都是圍繞著這個本質在做文章,添油加醋。
如果對集合這個概念陌生,沒關係,高中畢業那麼久,不記得情有可原。畢竟當時老師也不知道,風靡全球的 SQL 會基於集合理念發明出來。
集合,最簡單的例子就是陣列,比如 { a, b, c, d}。舉個形象化的例子,比如大學全班同學,這是個大集合,按照性別進而可以分成男同學集合和女同學集合。
男同學有什麼特徵?高大,威猛,有鬍子。
女同學有什麼特徵?白嫩,溫柔,有長髮。
就這樣,我們有兩個大集合了,男同學集合,女同學集合。回到 SQL 的原理上來,針對這兩個集合,SQL 運算做的事情,無非就是這幾樣:
-
尋找身高大於180cm的男同學
-
尋找身高最高的男同學
-
尋找有鬍子的男同學
-
尋找長了鬍子,身高低於160cm的男同學
-
統計沒有長鬍子的男同學人數
-
尋找最高的女同學
-
尋找最白的女同學
-
尋找又高又白的女同學
-
尋找正在談戀愛的男女同學
-
尋找曾經談過戀愛,而現在又有其他男女朋友的男同學和女同學
你看,無非就是做這些事情。是不是對SQL立馬就有好感了呢!
三、SQL 的數學基礎
如此有趣的一件事情,教科書偏要說的枯燥(希望下面離散數學,集合理論的科普不會煩到你,不想看,完全可以跳過)
-
交換律(Commutative Laws):
A ∪ B = B∪A, A ∩ B = B ∩ A
-
結合律(Associative Laws):
(A ∪ B) ∪ C = A ∪ (B∪C) = A ∪ B∪C
(A ∩ B) ∩ C = A ∩ (B ∩ C) = A ∩ B ∩ C
-
分配律(Distributive Laws):
(A ∩ B) ∪C = (A∪C) ∩ (B∪C)
(A∪B) ∩ C = (A ∩ C) ∪(B ∩ C)
-
等冪律(Impotent laws):
A∪A = A,A∩A = A
-
吸收律(Absorption laws):
(A∩B)∪A = A,(A∪B)∩A = A
-
同一律(Domination laws):
A∪Ø = A,A∩Ω= A
A∪Ω=Ω,A∩Ø = Ø;
參考:
這羅列了詳細的集合運算數學表示式。
所以,千萬別被教科書上的數學符號嚇到,而失去了學習SQL的興趣。學霸別聽我的,這些符號我知道對你完全是小菜一碟。
四、SQL基礎問題
下面我們用SQL來回答上面的10個男女同學問題:
-
把全班男女同學登記到花名冊上
-
找班上的八卦同學打聽男女朋友關係,記錄到戀愛關係秘本上
這裡用到的花名冊,戀愛關係秘本就是資料庫裡的二維表。先建這兩張表,分別是 Students(花名冊表),Relationships(戀愛關係秘本)。為了更加形象,用 Excel 展示下,這兩張表分別長這個樣子:
第一張表是 Students 花名冊表,共有 6 欄,分別解釋下含義:
-
StudentId: 用來標註學生的學號,一個學生只有一個學號;
-
Name:學生姓名;
-
Gender:學生性別;
-
Height:學生身高,cm 為單位
-
Mustache:有無鬍子;
-
SkinColor:膚色
第二張表是 Relationships(戀愛關係秘本),共有 6 欄,分別解釋下:
-
RelationshipId: 男女朋友關係成立的編號,用來確立兩人曾經處過或正在處於關係之中;
-
BoyId:男生編號;
-
GirlId:女生編號;
-
BeginDate:關係成立日期;
-
CurrentActive:當前是否還在戀愛期;Y 表示正在戀愛;N 表示已經分手;
-
EndDate:分手日期
注意: 欄位在資料庫中被稱為欄位
用 SQL 語句來表達建表的命令:
Students:
Create
Table dbo.Students(
StudentId
Varchar(
10),
Name
Nvarchar(
200),
Gender
Nvarchar(
1),
Height
Numeric(
4,
1),
Mustache
Varchar(
3),
SkinColor
Nvarchar(
1)
);
Relationships:
Create
Table dbo.Relationships(
RelationshipId
Int,
BoyId
Varchar(
10),
GirlId
Varchar(
10),
BeginDate Datetime,
CurrentActive
Varchar(
1),
EndDate Datetime
);
注意: 欄位旁邊必須加上資料型別,規範資料長度,精度,比如 varchar(3) 表示 3 個字長。
有關資料型別,可以參考參考官方文件對基本資料型別的定義和舉例
五,線上執行SQL工具
推薦可線上執行SQL的工具:
這款工具,有兩大特點:
-
支援六大資料庫,MySQL,Oracle,SQL Server,PostgreSQL,SQLite;
-
支援線上編輯及執行SQL,無需自搭資料庫環境
簡單瞭解下:
image整個頁面分為1,2,3個區域。
-
區域 1 的編輯器用來建立資料庫 schema ,比如建表,新建資料;
-
區域 2 則用來編輯和執行 SQL;
-
區域 3 用來展示 區域 2 中的 SQL 執行結果
使用這款工具,無需你手工安裝資料庫便可以完成本指南所有的 SQL.
完美!我們成功的完成了第一步。
六、SQL 簡易實戰
接下來,讓我們為巧婦準備好精米。
INSERT
使用這條 SQL 命令,將新增全班同學的個人資訊,包括姓名,學號,性別,身高,膚色,有無鬍子,以及男女朋友關係,(當然這可不能讓班主任知道。)
INSERT
INTO Students(
StudentId,
Name,
Gender,
Height,
Mustache,
SkinColor
)
Values
(
'001',N
'陳冠奇',N
'男',
186,
'No',N
'白'),
(
'002',N
'謝堂風',N
'男',
182,
'No',N
'白'),
(
'003',N
'黃博',N
'男',
176,
'Yes',N
'黑'),
(
'004',N
'李少傑',N
'男',
172,
'Yes',N
'黑'),
(
'005',N
'徐少斌',N
'男',
163,
'No',N
'黑'),
(
'006',N
'張白芷',N
'女',
172,
'No',N
'白'),
(
'007',N
'張少函',N
'女',
163,
'No',N
'白'),
(
'008',N
'靈昆',N
'女',
181,
'No',N
'黑'),
(
'009',N
'夏平',N
'女',
158,
'No',N
'白'),
(
'010',N
'莫文麗',N
'女',
156,
'No',N
'白')
INSERT
INTO Relationships(
RelationshipId,
BoyId,
GirlId,
BeginDate,
CurrentActive,
EndDate
)
Values
(
1001,
'001',
'006',
'2002-04-01',
'Y',
null),
(
1002,
'003',
'009',
'2001-04-01',
'Y',
null),
(
1003,
'005',
'010',
'2003-04-01',
'N',
'2004-04-01'),
(
1004,
'002',
'010',
'2004-04-01',
'N',
'2004-05-01'),
(
1005,
'004',
'010',
'2004-05-01',
'N',
'2005-08-01')
接下來我們用 SQL 做一些有意思的事情:
查詢身高大於180cm的男同學:
SELECT
Name
FROM Students
WHERE Height >
180
and Gender = N
'男'
查詢身高大於170cm的膚白女同學:
SELECT
Name
FROM Students
WHERE Height>
170
and SkinColor = N
'白'
and Gender = N
'女'
查詢最高的女同學:
SELECT
Name
FROM Students
WHERE Height = (
SELECT
MAX(Height)
FROM Students
WHERE Gender = N
'女' )
and Gender = N
'女'
查詢有戀愛關係的同學:
SELECT Boy.Name
as BoyName,
Girl.Name
AS GirlName
FROM Relationships Rel
INNER
JOIN Students Boy
on Rel.BoyId = Boy.StudentId
INNER
JOIN Students Girl
on Rel.GirlId = Girl.StudentId
最帥的陳冠奇居然留鬍子了,讓我們記錄下:
UPDATE Students
SET Mustache =
'Yes'
WHERE
Name = N
'陳冠奇'
帥奇留鬍子的原因居然是,陳冠奇和張白芷前兩天分手了,我們要記錄這段關係的破裂:
UPDATE Relationships
SET CurrentActive =
'N',
EndDate =
'2008-04-01'
WHERE BoyId = (
SELECT StudentId
FROM Students
WHERE
Name = N
'陳冠奇')
AND
GirlId = (
SELECT StudentId
FROM Students
WHERE
Name = N
'張白芷')
任何的痛苦都離不開戀人的離去,張白芷居然去國外留學了,因此花名冊少了這個人:
DELETE Students
WHERE
Name = N
'張白芷'
帥帥的陳冠奇,怎麼甘心就此沉淪,他又找了莫文麗做女朋友:
INSERT
INTO Relationships(
RelationshipId,
BoyId,
GirlId,
BeginDate,
CurrentActive,
EndDate
)
Values
(
1006,
'001',
'010',
'2008-04-01',
'Y',
null)
好奇的小樂,查了查莫文麗的後臺,發現她居然曾有過三次戀愛關係:
SELECT RelationshipId
FROM Relationships
WHERE GirlId = (
SELECT StudentId
FROM Students
WHERE
Name = N
'莫文麗')
恭喜! 到此為止,所有的SQL基本操作你都會了。
七、SQL 晉級分水嶺
有競爭力的技術肯定是要花大功夫來磨鍊的,否則人人看一遍就會的東西,賣得出什麼高價呢!
因此當大家都度過第一階段之後,如何意識到還有第二階段,第三階段,甚至第四階段就很重要了。那會影響你的長期發展。舒適區是留給平庸者的。
從技術角度,我們習慣將 SQL 資料庫開發分為 4 個階段:入門,初級,高階,資深。
注: 技術角度可分這四個階段,並不代表做到資深,你一定能年薪百萬。可千萬別這麼想,很多朋友諮詢我的第一個問題是,“黃老師,以我的水平,能要個30K不?” 這我不打包票,能做到什麼收入完全看你水平和天意(沒錯,很多時候,賺大錢靠運!)
在本文中,我只談 SQL 技術水平的晉級,不談其他。
上面的入門指南,相信你看完之後,寫 SQL 基本掌握了。這一階段過後,就是要透過反覆的操練這些 SQL ,直到你熟透這些 SQL 命令和語法。
幫你度過這階段最好的方式,是什麼呢?刷題。沒錯,簡單粗暴。這裡推薦牛客網,你可以試著去刷:
image左邊是題目,右邊編輯 SQL, 點選【儲存並除錯】即可執行 SQL。系統會提示,你的答案是否透過!
刷完這 60 多道題目,相信你的感覺一定很好!
小編推薦:
墨天輪,專注資料庫,為技術愛好者傾力打造,承載技術人的持續成長,匯聚最新技術動態、前沿主題課程。官網連結:modb.pro。
再推薦基本經典的小書,可以兼顧理論與實戰,具體看哪一本,依據你使用的資料庫軟體來:
《SQL 必知必會》(綜合)
《T-SQL Querying》中文《T-SQL 查詢》(SQL Server適用)
《Oracle程式設計藝術》(Oracle適用,只要是 ASK Tom 主編 Thomas Kyte 的著作不會錯)
八、SQL 資料庫深入學習
當你跨過了第二個階段,所有的 SQL 命令都會了,看到 SQL 題目也有自信了,自認為天下資料,為 SQL 皆可取的時候,你應該來挑戰下高難度了
現在你的角色是河南鄭州大學的學生會主席,所有學生的資訊都歸你管。別小看了這學生會主席,2017 年鄭州大學在校人數總共有7.26萬人。此時,你再查詢個又白又高的女生,嘿嘿…別想歪咯,資料查詢就會很難了。看你急不急!
怎麼辦呢,SQL 命令你也玩熟了,但每次查個人都要花費個20,30秒,查個交友記錄,快則1,2分鐘,慢則半天!
此時,你該修煉下 SQL 效能調優了。而 SQL 資料庫開發真正的挑戰才正式開始!
要研究資料,就要從體系著手,我總結了一下目前正在使用的 SQL Server,它的知識點可以用 20 張思維導圖來表達。而 SQL 效能調優正是與這 20 個知識點息息相關。
這20個知識點可以在這篇文章中找到:
如果你使用的是其他資料庫,那麼一份詳細的資料庫體系圖,是必不可少的。它就是深夜裡的北極星,為你照亮了前進的方向。
當然你跟我一樣,對紙質書情有獨鍾的話,這裡推薦幾本:
綜合類的資料庫調優書:
《資料庫索引設計與最佳化》
《資料查詢最佳化器的藝術》
Oracle 相關調優書:
《Oracle Concepts》
《Oracle 體系架構》
《Oracle DBA 手記》(雲和恩墨出品都是精品,咳咳,不是小編加的,原本就有!)
MySQL 相關調優書:
《高效能 MySQL》
SQL Server 相關調優書:
《Inside SQL Server 》系列
《T-SQL 效能調優密集-基於 SQL Server 2012 視窗函式》
這些書看下來應該會耗掉你2-3年的時間。當然,如果你願意痛飲咖啡,用007(一週工作7天,每天連續12個小時)的速度來看書,那也可能1年左右就夠了。但不建議這麼幹,身體健康比什麼都重要!
九、SQL 人的職業生涯
當任何超過5秒的SQL,在你手下都變成了秒出時,你可能會昂天長嘯,“老子終於天下第一啦”。不過且慢,你別忘記了,你還是會被專案經理催著幹活,比如改個欄位,改個需求,改處bug等等。此時,你恐怕最需要的是,一個得力的左膀右臂,一個能打的需求分析,更重要的是搞定靈活多變的業務變更,甚至你要挽起袖子,自己盯著業務變更,釋出更靈活適配的資料模型。此時資料建模,業務管理,資料治理,資料探勘,安全稽核等等都來了
此時,正是你職業生涯的分水嶺。
若你覺得你就是幹不了開會,扯皮,來回折騰的活兒,就喜歡指揮機器幹活,那就選擇偏技術的方向,比如運維DBA,資料庫研發。從事這條路線,意味著你要懂的更多的邊角料知識,比如作業系統,網路協議,自動化程式設計,架構設計,分散式計算,雲端計算等。這些知識資料早已有現成的資料可以參考,只要耐得下心來學,一定有成功出頭的那一天。但也極其容易放棄,因為東西實在太多,太雜,而且有些邊緣性的學科,一時半會你還用不到,比如網路協議。但如果不懂網路協議,碰到資料庫安全的問題,你就容易敗下陣來,死的很慘。你的任何一個缺點都會伴隨每一次的故障而被無限放大,被很多同事視為毫無戰鬥力,讓你自己都開始懷疑自己,鄙視自己。所以幹這行,首先要有一顆強大的心臟,在無數的口誅筆伐之下,你要堅挺自己的信念,不要懷疑自己的判斷,丟失基本判斷能力。
且運維不僅僅是個智力活,還是個體力活。
白天所有執行在資料庫上的應用都好好地跑著,一般不會有大問題,看上去 DBA 很輕鬆。但是一到晚上,你們的活兒才剛剛開始。有索引重建,磁碟告警了;有 ETL Job 失敗,資料庫卡住了;有叢集節點當機,需要更換機器了,等等。總之 7*24 的重活,累活都來了,而且是必須趕在天亮業務開始之前修復。有時候,那些夜貓子也很兇悍,大晚上非還要搶點貨,點個夜宵啥的。一下單,系統崩潰了,你的美夢也就泡湯了。或許你感冒了,正在休息,不行你得起來;或許你正在電影院看著復聯呢,不行,你得回公司。總之,為了工作,為了搶修資料庫,你必須第一時間趕赴現場。多少年輕的DBA都曾在高壓現場,留下了人生中第一口鮮血。
你說DBA那麼累,傻子才選,你走第二條路,扯皮!
恭喜你,你選了一條可以通向公司高層的路。也許是 CTO,也許是CEO。透過做資料執行,資料產品,或者資料分析,你認識了全公司上上下下的大小頭目,今天與運營總監吃個飯,明天與生產總監喝個咖啡。總之他們提的一切需求,都希望你全部搞定。你說你團隊人手不夠,公司不肯招人,跟他們有什麼關係?你說你excel就能實現的功能,為什麼非要整一套炫酷而無任何實用價值的視覺化報表分析軟體?他們就想要!你說你這個需求要1個月才能做好,他們拍著你的肩膀說,“你可以的,要相信自己。倆天,頂多兩天就能搞定!”
你帶著這麼多需求回到你的辦公室,看著滿臉青春的這些小夥小姑娘們,刷著微博,舔著朋友圈,個個臉上洋溢著熱焦瑪的香氣。你好忍心讓他們陪你加班到凌晨,還自費打滴滴麼!
好不容易,2個shot的星爸爸熱焦瑪下肚,你來了精神。熬到凌晨2點,連續2,3天回家看不到老婆/老公的笑臉,還給自己打氣,一切都是為了家庭。等到交上報告一看,“這裡資料改一下,口徑要和運營部統一”,“哪裡整個版面太醜了,影響公司形象,再修得漂亮一些。還有,這些報表都要加上許可權,不能讓其他部門人看到。好吧,明天下班前我們再談”。
好吧,這回你只得厚起臉皮請小朋友們一起改了,晚餐自費交了KFC全家桶,全組加班人員,一律叫車報銷。你默默的在群裡丟了一個又一個紅包。收到一個又一個的“老闆帥氣,老闆再來一個,寶寶沒搶到”
終於趕在deadline之前做完了,“怎麼樣,我說你可以的吧,看好你哦。這樣,我們昨天幾個人會後碰了下,發現你原來的設計也挺好,只是稍微還要再改改;還有,資料需要增加匯入匯出功能…”
如此反反覆覆,來來回回的折騰,某天你突然感慨,原來“別人用了一年,真的學到了我十年所用會的SQL技術”。此時,你會堅持自己的選擇是對的嗎,假如不幸的是,公司投資人撤資了,你所熟悉的環境沒了,怎麼辦?
因此,在這些零零碎碎的專案鍛鍊中,你能否總結有效的規律,提高自己業務溝通的能力,掌握資料治理的策略,嚴格把控專案管理的進度,都成了你的必修課。一旦鬆懈和迷茫,可真是萬劫不復!
十、SQL 資料庫必讀書單
如果你選的是 DBA,除了各家資料庫文件要通讀之外,還需要補充雲端計算相關:
《資料庫系統實現》
《雲端計算通俗講義》
《讓雲落地:雲端計算服務模式》
《雲端計算架構技術與實踐》
《Kubernates權威指南》
《微服務架構設計模式》
如果你選的是業務設計(無論是運營,產品,資料分析,尤其是資料分析師),那麼這些書,肯定是要讀一讀的
Kimball 的系列書:
《維度建模權威指南》
《資料倉儲與商業智慧寶典-成功設計、部署和維護 DW/BI 系統》
業務場景解決方案:
《計算廣告》
《推薦系統實戰》
《決戰大資料》
《大資料之路-阿里巴巴大資料實踐》
《企業IT架構轉型之道》
《設計資料密集型應用》
大資料系列:
《Hadoop 權威指南》
《Spark 權威指南》
《Hive 程式設計》
《Hive 實戰》
《Spark 高階資料分析》
《Hadoop構建資料倉儲實踐》
以上就是基本路線了,能在5-10年搭好這個基礎,你定當可以獨當一面。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556440/viewspace-2675212/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 2010年:給SQL Server DBA的三個建議SQLServer
- #給java程式設計師的10條建議,吐血推薦!Java程式設計師
- 在遊戲公司如何做到獨當一面?她們給出了三個答案遊戲
- 推薦給JavaScript開發人員的10個工具JavaScript
- 學軟體測試必看的10本書推薦給你
- 從業遊戲 22 年給獨立開發者的建議遊戲
- DBA學習書籍推薦
- 初學Java你有這些疑惑嗎?本文給你幾個建議Java
- 自學程式設計的朋友,我想給你們這 5 個建議程式設計
- 給DBA的SQL Server培訓建議PHSQLServer
- 如何成為公司獨當一面的工程師工程師
- 這兩個小工具,真是推薦了還想推薦。
- 給圖靈數學系列推薦一本書圖靈
- 如何提升你的能力?給年輕程式設計師的幾條建議程式設計師
- 給你推薦幾個免費自學網站網站
- 程式設計師進階之路—如何獨當一面程式設計師
- 推薦給運維人的14個最佳審查工具運維
- 成功推廣iOS應用的10個建議iOS
- 做IT這幾年,我整理了這些乾貨想要送給你!
- 給年輕程式設計師的7個建議程式設計師
- 給獨立開發商的5條PR建議
- 推薦一個製作 https 證書的工具 CertbotHTTP
- 寫給開發者:記錄日誌的10個建議
- 推薦一個去除圖片人物背景的工具RemovebgREM
- 推薦一個工具
- [圖書] Golang 優質開源圖書推薦Golang
- 網站相關圖書推薦網站
- 給新生的軟體網站工具推薦網站
- 截圖工具推薦-SnipasteAST
- 10 個 jQuery 圖表外掛推薦jQuery
- 給遊戲關卡設計的建議,如何用好引擎工具遊戲
- 推薦幾個好用的工具
- 推薦的這5個高效線上工具,每一個都很良心!
- 工具推薦|2020年最值得推薦的10款UI動效設計工具UI
- 只推薦一本 JavaScript 書,你推薦哪本?JavaScript
- 想要快速進入車載測試?這份車載面試題集錦送給你,建議收藏!面試題
- 推薦一個免費的 https 證書註冊工具HTTP
- 給設計師推薦16個免費線上工具