MySQL入門系列:MySQL概述

小孩子4919發表於2019-03-06

標籤: MySQL入門


儲存資料方式演變

人們從古至今都有儲存資料的需求,儲存方式是按照下邊的方式演變的。

人工管理階段

很久很久以前,人們把資料存在動物骨頭上,後來存到竹片上,再後來存到紙上,直到近代發明了磁帶留聲機啥的,不過這些都是依賴人工進行整理和儲存的,特點就是效率低下、錯誤率高、查詢不方便等等等等。。。

檔案系統階段

後來人們發明了計算機,為了管理各種資料,人們發明了一種叫檔案系統的東東,可以方便的通過檔案的儲存路徑和檔名來訪問各個檔案的內容,計算機程式也可以直接通過檔案系統來操作各種檔案,比人工管理爽多了。

資料庫階段

隨著檔案中儲存的內容越來越多,在檔案中修改和查詢某些資料已經變得非常困難了,所以人們發明了一種專門的軟體來管理儲存的資料,這些資料依照一定格式儲存,通過這個軟體可以方便的對資料進行增刪改查操作,從而極大的提升了資料管理效率,人們就把這個管理資料的軟體叫做資料庫管理系統

MySQL簡介

關係型資料庫管理系統

我們平時經常會用表格來存放資訊,比如下邊的兩個表格就存放著學生的一些基本資訊和他們的各種科目的考試成績:

學生基本資訊表
學號 姓名 性別 身份證號 學院 專業 入學時間
20180101 杜子騰 158177199901044792 計算機學院 電腦科學與工程 2018-09-01
20180102 杜琦燕 151008199801178529 計算機學院 電腦科學與工程 2018-09-01
20180103 範統 17156319980116959X 計算機學院 軟體工程 2018-09-01
20180104 史珍香 141992199701078600 計算機學院 軟體工程 2018-09-01
20180105 範劍 181048200008156368 航天學院 飛行器設計 2018-09-01
20180106 朱逸群 197995199801078445 航天學院 電子資訊 2018-09-01
學生成績表
學號 科目 成績
20180101 母豬的產後護理 78
20180101 論薩達姆的戰爭準備 88
20180102 母豬的產後護理 100
20180102 論薩達姆的戰爭準備 98
20180103 母豬的產後護理 59
20180103 論薩達姆的戰爭準備 61
20180104 母豬的產後護理 55
20180104 論薩達姆的戰爭準備 46

如果我們想查詢史珍香的《母豬的產後護理》科目的考試成績怎麼辦呢?我們可以先通過學生基本資訊表查詢到她的學號,然後再通過她的學號到學生成績表裡找到該學號對應的《母豬的產後護理》科目的成績。

表格也簡稱為表。有一種型別的資料庫管理系統就是通過表格來存放資料的,而且不同的表可以通過某種關係聯絡起來(例子中成績表通過學號和基本資訊表聯絡起來),我們把這種資料庫管理系統也稱為關係型資料庫管理系統,我們要嘮叨的MySQL就是一種關係型資料庫管理系統

MySQL的優勢

這種所謂的關係型資料庫管理系統有好多,比如甲骨文的Oracle,IBM的DB2,微軟的AccessSQL Server,開源的PostgreSQLMySQL 。。。我們是來嘮叨 MySQL的,所以瞅瞅它有啥牛逼的地方:

  1. 免費

    就是不要錢,有很多資料庫管理系統是要花真金白銀買的,不過MySQL隨便在網上下載就好嘍~

  2. 開源

    MySQL的程式碼都是公開的,網上隨便就能下載下來,方便我們瞭解它的實現原理。又因為是開源的,所以一旦有bug就會被好多人發現,設計MySQL的大叔們就會立即把bug修復,所以是非常穩定的。

  3. 跨平臺

    MySQL可以執行在各種主流的作業系統上,各種類Unix系統、Windows系統啥的~

  4. 很牛逼

    它可以快速、安全、有效地處理大量資料,不牛逼就沒人用啦~

客戶端/伺服器架構

以我們平時使用的微信為例,它其實是由兩部分組成的,一部分是客戶端,一部分是伺服器。客戶端可能有很多種形式,比如手機APP,電腦軟體或者是網頁版微信,每個客戶端都有一個唯一的使用者名稱,就是你的微訊號,另一方面,騰訊公司在他們的機房裡執行著一個伺服器軟體,我們平時操作微信其實都是用客戶端來和這個伺服器來打交道。比如狗哥用微信給貓爺發了一條訊息的過程其實是這樣的:

  1. 訊息被客戶端包裝了一下,新增了傳送者和接受者資訊,然後從狗哥的微信客戶端傳送給微信伺服器;
  2. 微信伺服器從訊息裡獲取到它的傳送者和接收者,根據訊息的接受者資訊把這條訊息送達到貓爺的微信客戶端,貓爺的微信客戶端裡就顯示出狗哥給他發了一條訊息。

MySQL的使用過程跟這個是一樣的,它有一個伺服器程式直接和我們儲存的資料打交道,然後可以有好多客戶端程式連線到這個伺服器程式,傳送增刪改查的請求,然後伺服器就響應這些請求,從而操作它維護的資料。和微信一樣,MySQL的每個客戶端都需要提供使用者名稱密碼才能登入,登入之後才能給伺服器發請求來操作某些資料。另外,客戶端程式和伺服器程式可以安裝到同一臺機器上,也可以安裝到不同的機器上。不過從我們學習的角度來說,也沒必要弄兩個電腦,一個當伺服器一個當客戶端了。所以我們一般只需要在自己的電腦上把伺服器程式和客戶端程式都安裝上,先開啟伺服器程式,再開啟客戶端程式和伺服器程式進行互動就好了~

小貼士: `MySQL`的大部分安裝包都包含了伺服器程式和客戶端程式(在Linux下使用RPM包時會有單獨的伺服器RPM包和客戶端RPM包,需要分別安裝),但是安裝包中自帶的客戶端程式是在黑框框裡使用的,如果你習慣了圖形使用者介面,可以自己去下載個 `MySQL Workbench` 或者 `Navicat`,這兩個客戶端軟體可以讓你在圖形介面上點點點~ 順便說一句,作為程式設計師使用圖形介面是不是有點兒low啊~ 也不是單純為了裝逼,使用黑框框的話很多時候會比圖形介面更快,更簡單~ 所以該用哪個客戶端軟體你心裡應該有點兒*數吧!

安裝MySQL

在安裝過程中一定要記住安裝路徑和使用者名稱密碼啊

我的機器上MySQL的安裝路徑是:/usr/local/Cellar/mysql/5.7.21/

使用者名稱是:root

密碼是:123456

Windows下安裝

略~

Mac下安裝

略~

Linux下安裝

略~

MySQL命令

MySQL中的可執行檔案

通常在MySQL安裝目錄下有個bin目錄,看一下在我的機器中bin目錄下的部分檔案:

.
├── mysql
├── mysql.server -> ../support-files/mysql.server
├── mysqladmin
├── mysqlbinlog
├── mysqlcheck
├── mysqld
├── mysqld_multi
├── mysqld_safe
├── mysqldump
├── mysqlimport
├── mysqlpump
... (省略其他檔案)

0 directories, 40 files
複製程式碼

這些都是可執行檔案,也就是說只要我們在黑框框裡輸入這些檔案的路徑(絕對路徑、相對路徑都可以)就可以執行它們。其實這些檔案就相當於圖形介面中的軟體圖示,滑鼠雙擊就可以執行,只不過在黑框框裡不能用滑鼠,必須把這些檔案的路徑輸入到黑框框裡才能執行它們。比方我想執行mysql這個檔案,那就可以在黑框框裡輸入:

/usr/local/Cellar/mysql/5.7.21/bin/mysql
複製程式碼

或者把當前目錄切換到/usr/local/Cellar/mysql/5.7.21/bin/,使用相對路徑也可以執行,就像這樣:

cd /usr/local/Cellar/mysql/5.7.21/bin/
mysql
複製程式碼

如果你覺得輸入絕對路徑或者切換當前目錄太麻煩,可以考慮把這些可執行檔案新增個快捷方式。Windows裡可以把bin目錄的路徑新增到系統變數PATH中,Linux或者Mac使用者就不用管了,在安裝過程中已經預設把這些命令設定為快捷方式了,你只需要直接輸入命令名稱就好了。

使用Windows的小夥伴趕緊把`bin`目錄的路徑新增到系統變數`PATH`中,我們下邊的操作都預設大家有了這些可執行檔案的快捷方式,就不再使用絕對路徑或者切換目錄的方式來執行這些檔案了。
複製程式碼

伺服器相關的可執行檔案

類UNIX系統

我們重點關注一下mysql.server這個可執行檔案,這個檔案可以幫助我們啟動和關閉伺服器。這個可執行檔案後邊可以攜帶引數,啟動和關閉的引數如下:

  1. 啟動伺服器攜帶的引數:

    mysql.server start
    複製程式碼
  2. 關閉伺服器攜帶的引數:

    mysql.server stop
    複製程式碼

我們開啟一下伺服器,在黑框框裡輸入mysql.server start,看到輸出結果:

Starting MySQL
. SUCCESS!
複製程式碼

這就說明啟動成功了~

Windows系統

一般把MySQL註冊為Windows的服務,然後呼叫net start MySQLnet stop MySQL來啟動和關閉伺服器。

客戶端相關的可執行檔案

在伺服器程式啟動之後,就可以使用mysql這個可執行檔案來啟動客戶端並連線該伺服器了,這個可執行檔案需要一些引數,格式如下:

mysql -h主機名  -u使用者名稱 -p密碼
複製程式碼

各個引數的意義如下:

引數名 含義
-h 表示啟動伺服器程式的計算機的域名或者IP地址,如果伺服器程式就執行在本機的話,可以省略這個引數,也可以填localhost或者127.0.0.1。也可以寫作 --host=主機的形式。
-u 表示使用者名稱,如果你是剛剛使用MySQL,則使用者名稱是root。也可以寫作 --user=使用者名稱的形式。
-p 表示密碼,如果你在安裝過程中設定了密碼,那就用你設定的密碼,否則密碼為空。也可以寫作 --password=密碼的形式。

比如我這樣執行下邊這個可執行檔案(使用者名稱密碼按你的實際情況填寫),就可以啟動MySQL客戶端,並且連線到伺服器了。

mysql -hlocahhost -uroot -p123456
複製程式碼

也可以這麼寫:

mysql --host=localhost --user=root --password=123456
複製程式碼

我們看一下連線成功後的介面:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21 Homebrew

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
複製程式碼

最後一行的mysql>是一個客戶端的提示符,之後客戶端傳送給伺服器的命令都需要寫在這個提示符後邊。

如果我們想斷開客戶端與伺服器的連線並且關閉客戶端的話,可以在mysql>提示符後輸入下邊任意一個命令:

  1. quit
  2. exit
  3. \q

比如我們輸入quit試試:

mysql> quit
Bye
複製程式碼

輸出了Bye說明客戶端程式已經關掉了。注意注意注意,這是關閉客戶端程式的方式,不是關閉伺服器程式的方式,怎麼關閉伺服器上一節裡嘮叨過了。

如果你願意,你可以多開啟幾個黑框框,每個黑框框都使用mysql -hlocahhost -uroot -p123456來執行多個客戶端程式,每個客戶端程式都是互不影響的。如果你有多個電腦,也可以試試把它們用區域網連起來,在一個電腦上啟動MySQL伺服器程式,在另一個電腦上執行mysql命令時使用IP地址作為主機名來連線到伺服器。

連線注意事項
  1. 最好不要在一行命令中輸入密碼。

    我們直接在黑框框裡把密碼敲出去被別人看到咋辦,這和你當別人的面輸入銀行卡密碼沒啥區別,所以我們在執行mysql連線伺服器的時候可以不顯式的寫出密碼,就像這樣:

    mysql -hlocahhost -uroot -p
    複製程式碼

    點選回車之後才會提示你輸入密碼:

    Enter password:
    複製程式碼

    不過這回你輸入的密碼不會被顯示出來,心懷不軌的人也就看不到了,輸入完成點選回車就成功連線到了伺服器。

  2. 如果你非要在顯式的把密碼熟出來,那密碼值和-p之間不能有空白字元,其他引數名之間可以有空白字元,就像這樣:

    mysql -h localhost -u root -p123456
    複製程式碼

    如果加上了空白字元就是錯誤的,比如這樣:

    mysql -h localhost -u root -p 123456
    複製程式碼
  3. mysql的各個引數的擺放順序沒有硬性規定,也就是說你也可以這麼寫:

    mysql -p  -u root -h localhost
    複製程式碼
  4. 如果你的伺服器和客戶端安裝在同一臺機器上,-h引數可以省略,就像這樣:

    mysql -u root -p  
    複製程式碼
  5. 如果你使用的是類Unix系統,並且省略-u引數後,會把你登陸作業系統的使用者名稱當作MySQL的使用者名稱去處理。

    比方說我用登入作業系統的使用者名稱是wangqingfeng,那麼在我的機器上下邊這兩條命令是等價的:

    mysql -u wangqingfeng -p
    複製程式碼
    mysql -p
    複製程式碼

    對於Windows系統來說,預設的使用者名稱是ODBC,你可以通過設定環境變數USER來新增一個預設使用者名稱。

總結

  1. 傳統的資料儲存方式有這樣那樣的弊端,所以使用資料庫管理系統可以更方便的管理資料。

  2. MySQL是一種關係型資料庫管理系統,使用表來儲存資料。它免費、開源、跨平臺很牛逼,是居家旅行的不二之選。MySQL是使用客戶端/伺服器架構組織的軟體,伺服器程式用來統一管理真實資料,客戶端軟體可以連線到伺服器並且向伺服器傳送各種運算元據的請求。

  3. 安裝好的MySQL通常都會攜帶伺服器程式和客戶端程式。

  4. 類Unix系統通常使用mysql.server來開啟和關閉伺服器,Windows系統通常將伺服器程式註冊為一個Windows服務,可以通過net start|stop mysql來開啟或關閉伺服器程式。

  5. 通常使用mysql來啟動客戶端程式並連線到伺服器,需要攜帶的引數如下:

    • -h:表示主機名
    • -u:表示使用者名稱
    • -p:表示密碼

小冊

本系列專欄都是MySQL入門知識,想看進階知識可以到小冊中檢視:《MySQL是怎樣執行的:從根兒上理解MySQL》的連結 。小冊的內容主要是從小白的角度出發,用比較通俗的語言講解關於MySQL進階的一些核心概念,比如記錄、索引、頁面、表空間、查詢優化、事務和鎖等,總共的字數大約是三四十萬字,配有上百幅原創插圖。主要是想降低普通程式設計師學習MySQL進階的難度,讓學習曲線更平滑一點~

MySQL入門系列:MySQL概述

相關文章