標籤: 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
,微軟的Access
和SQL Server
,開源的PostgreSQL
和MySQL
。。。我們是來嘮叨 MySQL
的,所以瞅瞅它有啥牛逼的地方:
-
免費
就是不要錢,有很多資料庫管理系統是要花真金白銀買的,不過
MySQL
隨便在網上下載就好嘍~ -
開源
MySQL
的程式碼都是公開的,網上隨便就能下載下來,方便我們瞭解它的實現原理。又因為是開源的,所以一旦有bug就會被好多人發現,設計MySQL的大叔們就會立即把bug修復,所以是非常穩定的。 -
跨平臺
MySQL
可以執行在各種主流的作業系統上,各種類Unix系統、Windows系統啥的~ -
很牛逼
它可以快速、安全、有效地處理大量資料,不牛逼就沒人用啦~
客戶端/伺服器架構
以我們平時使用的微信為例,它其實是由兩部分組成的,一部分是客戶端,一部分是伺服器。客戶端可能有很多種形式,比如手機APP,電腦軟體或者是網頁版微信,每個客戶端都有一個唯一的使用者名稱,就是你的微訊號,另一方面,騰訊公司在他們的機房裡執行著一個伺服器軟體,我們平時操作微信其實都是用客戶端來和這個伺服器來打交道。比如狗哥用微信給貓爺發了一條訊息的過程其實是這樣的:
- 訊息被客戶端包裝了一下,新增了傳送者和接受者資訊,然後從狗哥的微信客戶端傳送給微信伺服器;
- 微信伺服器從訊息裡獲取到它的傳送者和接收者,根據訊息的接受者資訊把這條訊息送達到貓爺的微信客戶端,貓爺的微信客戶端裡就顯示出狗哥給他發了一條訊息。
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
這個可執行檔案,這個檔案可以幫助我們啟動和關閉伺服器。這個可執行檔案後邊可以攜帶引數,啟動和關閉的引數如下:
-
啟動伺服器攜帶的引數:
mysql.server start 複製程式碼
-
關閉伺服器攜帶的引數:
mysql.server stop 複製程式碼
我們開啟一下伺服器,在黑框框裡輸入mysql.server start
,看到輸出結果:
Starting MySQL
. SUCCESS!
複製程式碼
這就說明啟動成功了~
Windows系統
一般把MySQL
註冊為Windows的服務,然後呼叫net start MySQL
和net 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>
提示符後輸入下邊任意一個命令:
quit
exit
\q
比如我們輸入quit
試試:
mysql> quit
Bye
複製程式碼
輸出了Bye
說明客戶端程式已經關掉了。注意注意注意,這是關閉客戶端程式的方式,不是關閉伺服器程式的方式,怎麼關閉伺服器上一節裡嘮叨過了。
如果你願意,你可以多開啟幾個黑框框,每個黑框框都使用mysql -hlocahhost -uroot -p123456
來執行多個客戶端程式,每個客戶端程式都是互不影響的。如果你有多個電腦,也可以試試把它們用區域網連起來,在一個電腦上啟動MySQL
伺服器程式,在另一個電腦上執行mysql
命令時使用IP
地址作為主機名來連線到伺服器。
連線注意事項
-
最好不要在一行命令中輸入密碼。
我們直接在黑框框裡把密碼敲出去被別人看到咋辦,這和你當別人的面輸入銀行卡密碼沒啥區別,所以我們在執行
mysql
連線伺服器的時候可以不顯式的寫出密碼,就像這樣:mysql -hlocahhost -uroot -p 複製程式碼
點選回車之後才會提示你輸入密碼:
Enter password: 複製程式碼
不過這回你輸入的密碼不會被顯示出來,心懷不軌的人也就看不到了,輸入完成點選回車就成功連線到了伺服器。
-
如果你非要在顯式的把密碼熟出來,那密碼值和
-p
之間不能有空白字元,其他引數名之間可以有空白字元,就像這樣:mysql -h localhost -u root -p123456 複製程式碼
如果加上了空白字元就是錯誤的,比如這樣:
mysql -h localhost -u root -p 123456 複製程式碼
-
mysql
的各個引數的擺放順序沒有硬性規定,也就是說你也可以這麼寫:mysql -p -u root -h localhost 複製程式碼
-
如果你的伺服器和客戶端安裝在同一臺機器上,
-h
引數可以省略,就像這樣:mysql -u root -p 複製程式碼
-
如果你使用的是類Unix系統,並且省略
-u
引數後,會把你登陸作業系統的使用者名稱當作MySQL
的使用者名稱去處理。比方說我用登入作業系統的使用者名稱是
wangqingfeng
,那麼在我的機器上下邊這兩條命令是等價的:mysql -u wangqingfeng -p 複製程式碼
mysql -p 複製程式碼
對於Windows系統來說,預設的使用者名稱是
ODBC
,你可以通過設定環境變數USER
來新增一個預設使用者名稱。
總結
-
傳統的資料儲存方式有這樣那樣的弊端,所以使用資料庫管理系統可以更方便的管理資料。
-
MySQL
是一種關係型資料庫管理系統,使用表來儲存資料。它免費、開源、跨平臺很牛逼,是居家旅行的不二之選。MySQL
是使用客戶端/伺服器架構組織的軟體,伺服器程式用來統一管理真實資料,客戶端軟體可以連線到伺服器並且向伺服器傳送各種運算元據的請求。 -
安裝好的
MySQL
通常都會攜帶伺服器程式和客戶端程式。 -
類Unix系統通常使用
mysql.server
來開啟和關閉伺服器,Windows系統通常將伺服器程式註冊為一個Windows
服務,可以通過net start|stop mysql
來開啟或關閉伺服器程式。 -
通常使用
mysql
來啟動客戶端程式並連線到伺服器,需要攜帶的引數如下:-h
:表示主機名-u
:表示使用者名稱-p
:表示密碼
小冊
本系列專欄都是MySQL入門知識,想看進階知識可以到小冊中檢視:《MySQL是怎樣執行的:從根兒上理解MySQL》的連結 。小冊的內容主要是從小白的角度出發,用比較通俗的語言講解關於MySQL進階的一些核心概念,比如記錄、索引、頁面、表空間、查詢優化、事務和鎖等,總共的字數大約是三四十萬字,配有上百幅原創插圖。主要是想降低普通程式設計師學習MySQL進階的難度,讓學習曲線更平滑一點~