mysql資料庫簡單入門(資料庫入門基礎)

本文目錄一覽:

mysql資料庫怎麼學

先給出我的核心觀點:

學習,無論你是學什麼,也無論你有沒有基礎。思考永遠是第一位的,有些知識你沒接觸過不要緊,用不著害怕,也沒必要害怕。重要的是一秒鐘也不要停止思考,問題要想透徹,正所謂磨刀不誤砍柴工。尤其是作為工程師,要有打破砂鍋問到底的精神,否則你怎麼學都沒用。

首先,學習基本的SQL語法。完成這個後,你就可以編寫SQL語句了。這一步推薦:W3Schools的 SQL 教程。

其次,學習資料庫的主要功能和使用方法,比如用戶相關或者許可權相關等等。

我推薦兩本書:

一、《MySQL必知必會》 這本書講的非常全,從基本概念,到查詢到插入新建表,用戶的管理,都有具體的例子,非常適合沒有任何基礎的同學來學習Mysql,總之這本書學習的方法就是:1、十分鐘了解下資料庫的基本概念 2、找到練手的資料庫 3、對照著上面的內容去敲。本書里也有大量的內容是講sql的,可以結合w3c的sql教程一起,有取捨地看。

二、《資料庫系統概念》這本書是dba必看的。看完這些並且實踐+思考之後,可以算入門了。接下來對於希望深入學習的童鞋我推薦幾本書(很多大神都這麼推薦),《高性能MySQL(第3版)》、 《MySQL技術內幕(第4版)》,《MySQL技術內幕 InnoDB存儲引擎》,《深入理解MySQL》還有Mysql的官網。讀完這些東西,再加些豐富的經驗,理論上來講就具備DBA的水平了。十分推薦閱讀Planet MySQL上匯總的博客,特別是Percona’s MySQL InnoDB performance and scalability blog但是,正如我開頭所言的。

面對問題的時候一定要積極思考!比如:我問你,面對一個並發量比較高的場景,如何配置mysql的連接數?你可能會回答:「哦,就是調高max_connection的數值吧。」那,你有沒有思考過調到多少是最合適的呢?為什麼這樣設置就最合適呢?也許你會回答:「恩我知道,可以看系統之前的max_used_connection的數值,然後來設置。也可以調高back_log的值。」那你有沒有思考過,max_connection連接數太高會有什麼不好的影響呢?back_log設置的太高有什麼不好的地方呢?max_connect的上限其實是取決於mysql能獲得的文件描述符的數量,也就是說你就算設置成10000,最後也是沒用的,系統會根據機器的情況自動調低。也許你會回答:「恩我知道,設置太高,會有系統開銷…」那你有沒有思考過,這些開銷具體是什麼呢?是什麼工作導致了需要這些內存開銷?也許你還會回答,在連接創建的時候,會立刻為它分配連接緩衝區以及查詢緩衝區,這些都會吃內存。那你有沒有思考過,佔據的資源具體是多少呢?取決於哪些因素呢?好了,我們先結束這個問題。回到知乎的問題上來,其實我說了這麼多,就是表達要如何自學mysql。所以的所以,你必須不斷思考,才能在工作中面對具體場景的時候,非常淡定地推斷:「哦,一定是這裡出了問題。應該怎麼怎麼做。」面對問題,拿出打破砂鍋問到底的精神,先思考一番,給出自己的假設,不要著急地去找度娘,谷歌。思考過後,帶著你的推斷或者答案,大膽地去搜索吧!去看看別人的見解,去看看官方的描述!這才是一個工程師應有的態度。最後我想給出一些有價值的學習資料。可以省去一些時間。-電子書:我認為多看書還是有好處的。有些書值得反覆看許多遍,有時候只看一遍無法深刻理解吸收,思考也不夠充分

學習資料庫要掌握哪些技能才算入門?

    資料庫是當今世界最重要的技術,甚至都不用謙虛的加之一!

為什麼?因為它是各種應用的基礎!大數據,看名字就知道離不開資料庫。人工智慧,如果沒有數據,你哪來的智能?網路,網路上的內容還不是存在資料庫里的?管理系統,管理的是什麼?還不是數據嗎!哪怕你手機里的聯繫人,也是存在數據里的哦。

資料庫是我們每天都會用到的一個工具,但我們都不知道它的存在。對於資料庫,我們可以理解成數據的倉庫,裡面用表格的形式分門別類地存放你的數據。我們可以通過一種稱為SQL的語言操作這些表。

SQL一般指結構化查詢語言(Structured Query Language),簡稱SQL。

當然了,資料庫系統還會提供一定的安全防護功能,備份和恢復功能。

如果我們想學習資料庫的使用,要掌握哪些基礎的技能才算入門呢?

一、理解資料庫的實際意義,也就是前文說的表格形式存放數據。

二、要掌握基本的數據操作命令,一般就是四種:查詢、插入、更新、刪除。這個對應生活中的以下場景,上網瀏覽就是查詢,發朋友圈就是插入,換個頭像就是更新,撤回就是刪除。

三、要能用編程語言操作數據,無論什麼編程語言操作資料庫都是按照以下的思路進行的:

    1、連接到資料庫

2、操作資料庫,方式一般就四種:查詢、插入、更新、刪除。

3、關閉連接

四、當然了,還要能搭建一個資料庫軟體環境才行,常用的就是微軟的SQLSERVER,圖形化界面使用方便,只不過文件非常大。或者就是Mysql,字元操作,當然現在也有很多配套的軟體可以方便的操作,推薦小皮面板,有興趣的朋友可以百度或者看我發的圖文里有。

一般地,掌握了上面的四個知識就算入門了,就可以寫一些數據相關的小應用了。

MySQL從入門到精通(九) MySQL鎖,各種鎖

鎖是計算機協調多個進程或線程並發訪問某一資源的機制,在資料庫中,除傳統的計算資源(CPU、RAM、I/O)爭用外,數據也是一種供許多用戶共享的資源,如何保證數據並發訪問的一致性,有效性是所有資料庫必須解決的一個問題,鎖衝突也是影響資料庫並發訪問性能的一個重要因素,從這個角度來說,鎖對資料庫而言是尤其重要,也更加複雜。MySQL中的鎖,按照鎖的粒度分為:1、全局鎖,就鎖定資料庫中的所有表。2、表級鎖,每次操作鎖住整張表。3、行級鎖,每次操作鎖住對應的行數據。

全局鎖就是對整個資料庫實例加鎖,加鎖後整個實例就處於只讀狀態,後續的DML的寫語句,DDL語句,已經更新操作的事務提交語句都將阻塞。其典型的使用場景就是做全庫的邏輯備份,對所有的表進行鎖定,從而獲取一致性視圖,保證數據的完整性。但是對資料庫加全局鎖是有弊端的,如在主庫上備份,那麼在備份期間都不能執行更新,業務會受影響,第二如果是在從庫上備份,那麼在備份期間從庫不能執行主庫同步過來的二進位日誌,會導致主從延遲。

解決辦法是在innodb引擎中,備份時加上–single-transaction參數來完成不加鎖的一致性數據備份。

添加全局鎖: flush tables with read lock; 解鎖 unlock tables。

表級鎖,每次操作會鎖住整張表.鎖定粒度大,發送鎖衝突的概率最高,並發讀最低,應用在myisam、innodb、BOB等存儲引擎中。表級鎖分為: 表鎖、元數據鎖(meta data lock, MDL)和意向鎖。

表鎖又分為: 表共享讀鎖 read lock、表獨佔寫鎖write lock

語法: 1、加鎖 lock tables 表名 … read/write

2、釋放鎖 unlock tables 或者關閉客戶端連接

注意: 讀鎖不會阻塞其它客戶端的讀,但是會阻塞其它客戶端的寫,寫鎖既會阻塞其它客戶端的讀,又會阻塞其它客戶端的寫。大家可以拿一張表來測試看看。

元數據鎖,在加鎖過程中是系統自動控制的,無需顯示使用,在訪問一張表的時候會自動加上,MDL鎖主要作用是維護表元數據的數據一致性,在表上有活動事務的時候,不可以對元數據進行寫入操作。為了避免DML和DDL衝突,保證讀寫的正確性。

在MySQL5.5中引入了MDL,當對一張表進行增刪改查的時候,加MDL讀鎖(共享);當對錶結構進行變更操作時,加MDL寫鎖(排他).

查看元數據鎖:

select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema_metadata_locks;

意向鎖,為了避免DML在執行時,加的行鎖與表鎖的衝突,在innodb中引入了意向鎖,使得表鎖不用檢查每行數據是否加鎖,使用意向鎖來減少表鎖的檢查。意向鎖分為,意向共享鎖is由語句select … lock in share mode添加。意向排他鎖ix,由insert,update,delete,select。。。for update 添加。

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_lock;

行級鎖,每次操作鎖住對應的行數據,鎖定粒度最小,發生鎖衝突的概率最高,並發讀最高,應用在innodb存儲引擎中。

innodb的數據是基於索引組織的,行鎖是通過對索引上的索引項加鎖來實現的,而不是對記錄加的鎖,對於行級鎖,主要分為以下三類:

1、行鎖或者叫record lock記錄鎖,鎖定單個行記錄的鎖,防止其他事物對次行進行update和delete操作,在RC,RR隔離級別下都支持。

2、間隙鎖Gap lock,鎖定索引記錄間隙(不含該記錄),確保索引記錄間隙不變,防止其他事物在這個間隙進行insert操作,產生幻讀,在RR隔離級別下都支持。

3、臨鍵鎖Next-key-lock,行鎖和間隙鎖組合,同時鎖住數據,並鎖住數據前面的間隙Gap,在RR隔離級別下支持。

innodb實現了以下兩種類型的行鎖

1、共享鎖 S: 允許一個事務去讀一行,阻止其他事務獲得相同數據集的排他鎖。

2、排他鎖 X: 允許獲取排他鎖的事務更新數據,阻止其他事務獲得相同數據集的共享鎖和排他鎖。

insert 語句 排他鎖 自動添加的

update語句 排他鎖 自動添加

delete 語句 排他鎖 自動添加

select 正常查詢語句 不加鎖 。。。

select 。。。lock in share mode 共享鎖 需要手動在select 之後加lock in share mode

select 。。。for update 排他鎖 需要手動在select之後添加for update

默認情況下,innodb在repeatable read事務隔離級別運行,innodb使用next-key鎖進行搜索和索引掃描,以防止幻讀。

間隙鎖唯一目的是防止其它事務插入間隙,間隙鎖可以共存,一個事務採用的間隙鎖不會阻止另一個事務在同一間隙上採用的間隙鎖。

零基礎如何自學使用MySQL資料庫?

對於非計算機出身的我,大學只會hello word和跑馬燈,期間過程確實非常曲折,分享下我的自學過程:

1、 自己在windows和linux上安裝了mysql,自學linux的基礎知識,學習mysql的最基礎的知識,即怎麼寫sql,存儲過程,表的設計等,從0到熟悉大概花了3個月 ,推薦《mysql入門很簡單》。

2、系統地較為深入地學習mysql的sql優化,備份和恢復,參數優化,架構優化,硬體層面的優化,高可用方案,複製技術等等,這段時間你不一定能實際接觸到這些,就像我當初那樣,肯定沒什麼公司招一個小白。 我選擇自己看書,推薦《高性能mysql》,裡面所有的章節都需要看一遍,以現在的水平肯定看不懂,但需要知道大概怎麼回事,為後續的找mysql初級dba的工作打一個鋪墊,這個過程大概也需要3個月。

3、 紙上得來終覺淺,完成以上兩步,我開始準備找一份mysql相關的工作,而不是天天用著excel表格做著select * from table_sb這樣的工作。 當然我這麼猥瑣的人肯定不會裸辭,該畫的電路板也一樣畫,業餘時間開始投初級mysql dba的工作,並且不間斷地學習,網上各種找mysql面試的相關題目(實際上我當時完全沒有任何實戰經驗),陸續收到一些面試,憑藉之前自學的mysql知識,開始胡亂吹牛逼,先混進去再說。 你不做mysql實際相關的工作,永遠也不知道自己之前認知的db知識有多幼稚。 友情提示一點,一般公司都沒有專職dba的,所以面試的時候一定要自信,其實你學了這麼多,雖然毫無實戰經驗,理論知識很大概率比面試你的人牛逼,所以各種吹,我就這樣真正進入初級dba的圈子(由於這時對linux還處於cd ls的水平,所以之前也根本沒做過運維),這個邊工作邊找工作的過程又持續了2個月。

4、真正進入互聯網,接觸生產環境後,這是我進步最大的時候。 第一步需要將之前所學真正地應用起來,並且應用的過程中,再回頭看之前的書籍,這時候需要真正去理解,而不是似是而非,一知半解。 這時再推薦《高性能mysql 第三版》,全本再看一遍,這時需要全部看懂,另外還有《mysql技術內幕:innodb存儲引擎》等等。 總之這段時間就需要開始關注mysql一些細節了,比如db故障處理,高可用,負載均衡等等的具體實現了。 另外,linux的知識同步也要深入去學習,至少會寫shell腳本,常見的linux知識等,我在這花了1年多;

5、 dba的工作一般是非常輕閑的,畢竟不是大公司,技術能力有限,該學的也學得差不多了,接觸不到海量數據,高並發等比較鍛煉人的場合,於是我又準備跳了。 於是來了公有雲,現在每天運維萬多個db實例,平均每天處理5+個緊急db故障,幾乎mysql會遇到的問題,感覺都遇到了,能感覺到技術實力和經驗也在每天都在積累,在進步。 但是感覺還是欠缺了很多,下一步就看你選擇了,是再去研究源代碼,底層原理的東西多點,還是資料庫運維和應用多一點,就比如業界姜承堯,何登成與葉金榮的區別。 由於我的歷史原因,對c++等幾乎不懂,平時也用不到,所以看代碼等事實際太累,於是我再去學mongodb,接了公司mongodb運維的活,算是在廣度上的一個擴展,萬一哪天mysql不行了呢

6、 總之,對於db小白來說,最重要的一點就是,學習的過程不能斷。 PS 上面的方法比較野路子,適合沒什麼基礎的童鞋,如果本來就是DBA,比如從oracle轉到mysql,那麼建議直接看mysql官方文檔,而官方文檔是db達到一定水平後必看,出問題時必查的權威文檔。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/297448.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-28 12:16
下一篇 2024-12-28 12:16

相關推薦

  • Python wordcloud入門指南

    如何在Python中使用wordcloud庫生成文字雲? 一、安裝和導入wordcloud庫 在使用wordcloud前,需要保證庫已經安裝並導入: !pip install wo…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 數據結構與演算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與演算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序演算法、字元串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python豎線圖:從入門到精通

    Python豎線圖,即Python的繪圖工具matplotlib中的一種圖形類型,具有直觀、易於理解的特點,適用於各種數據分析和可視化場景。本文從初學者角度出發,介紹Python豎…

    編程 2025-04-29

發表回復

登錄後才能評論