# MySQL 安裝及使用基本教學
## MySQL安裝
資料來源:
https://www.learncodewithmike.com/2020/02/python-mysql.html
依步驟安裝MySQL
下載網站:https://www.mysql.com/downloads/
![](https://i.imgur.com/XDcQ6b1.png)
選擇Windows的安裝檔
![](https://i.imgur.com/UcyaH5p.png)
下載MSI安裝檔
![](https://i.imgur.com/IGzj8qA.png)
點擊Download按鈕後,在下一個畫面選擇「No thanks, just start my download.」即可
選擇Develop Default,開始進行安裝
![](https://i.imgur.com/Wm213yF.png)
過程中有一個步驟是需要設定MySQL資料庫的管理員密碼,如下圖:
![](https://i.imgur.com/cY5pB88.png)
設定完成後,在接下來的安裝步驟中,需要驗證密碼,如下圖:
![](https://i.imgur.com/EaDP580.png)
安裝完成後,開啟MySQL的資料庫管理工具 MySQL Workbench,如下圖:
![](https://i.imgur.com/A3jjeF3.png)
## MySQL 使用
點擊local instance MySQL80
![](https://i.imgur.com/PE1utBI.png)
輸入下載時設定的密碼
![](https://i.imgur.com/LxZU8kS.png)
建立資料庫
![](https://i.imgur.com/VYCEsrv.png)
輸入資料庫名稱(kkbox)及選擇字元集為utf8,如下圖:
![](https://i.imgur.com/IovlDIq.png)
接著點選Apply,資料庫就建立完成。
建立資料表:
需在左邊側欄的地方,切換到Schemas(模式)頁籤,如下圖:
![](https://i.imgur.com/qR7AUqG.png)
其中可以看到剛剛所建立的資料庫,點選後,選擇Tables(資料表),右鍵新增資料表(Create Table),如下圖:
![](https://i.imgur.com/uW44SOM.png)
接著輸入資料表名稱(charts)及定義欄位,如下圖:
![](https://i.imgur.com/uXtynHL.png)
輸入完成後,同樣點選右下角的Apply,即完成資料表的建立。
## 新增資料表資料
MySQL資料庫的環境建置完成後,要透過Python進行存取,需要安裝pymysql套件(Package),可以利用 pip install pymysql 指令來達成。接著開啟Python專案,新增一個db.py檔,用來練習接下來的資料庫操作。
而Python專案要存取MySQL資料庫,除了引用pymysql模組(Module)外,還需要設定連線的參數,這邊利用Python字典(Dictionary)資料型態來進行設定,如下範例:
```
import pymysql
import charts
# 資料庫參數設定
db_settings = {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "資料庫管理員密碼",
"db": "kkbox",
"charset": "utf8"
}
```
接著,將資料庫參數傳入pymysql模組(Module)的connect()方法(Method)中,建立Connection物件。另外,在連線的過程中,可能會發生例外錯誤,所以建議使用Python的try-except例外處理機制,如下範例:
```
import pymysql
import charts
# 資料庫設定
db_settings = {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "資料庫管理員密碼",
"db": "kkbox",
"charset": "utf8"
}
try:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
except Exception as ex:
print(ex)
```
與資料庫的連線建立完成後,要進行相關的操作,需要建立Cursor(指標)物件來執行,這邊使用Python的with陳述式,當資料庫存取完成後,自動釋放連線,如下範例:
```
import pymysql
import charts
# 資料庫設定
db_settings = {
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "資料庫管理員密碼",
"db": "kkbox",
"charset": "utf8"
}
try:
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
#資料表相關操作
except Exception as ex:
print(ex)
```
接著即可在with陳述式區塊中,撰寫與執行SQL語法,而新增資料至資料表中需執行INSERT的SQL語法,如下範例:
```
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料SQL語法
command = "INSERT INTO charts(id, name, artist)VALUES(%s, %s, %s)"
# 取得華語單曲日榜
charts = charts.get_charts_tracks("H_PilcVhX-E8N0qr1-")
for chart in charts:
cursor.execute(
command, (chart["id"], chart["name"], chart["album"]["artist"]["name"]))
# 儲存變更
conn.commit()
```
在第12行以華語單曲日榜的ID為例,呼叫get_charts_tracks()函式取得資料,回傳結果的格式為多筆字典(Dictionary)的串列(List),所以可以透過Python迴圈,利用Cursor(指標)物件執行新增資料的SQL語法,將每筆資料的id、歌曲名稱及歌手寫入資料庫中,最後透過Connection物件的commit()方法儲存。
開啟MySQL Workbench的檢視模式,即可看到執行結果,如下範例:
![](https://i.imgur.com/E1DZTFA.png)
執行結果:
![](https://i.imgur.com/nzPtptj.png)
## 查詢資料表資料
將華語單曲日榜的資料成功寫入charts資料表後,要透過Python撈取所有的資料,需執行SELECT的SQL語法,最後透過Cursor(指標)物件的fetchall()方法(Method)取回,如下範例
```
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 查詢資料SQL語法
command = "SELECT * FROM charts"
# 執行指令
cursor.execute(command)
# 取得所有資料
result = cursor.fetchall()
print(result)
```
如果只想取得單筆資料(第一筆),則可以利用fetchone()方法,如下範例:
```
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料指令
command = "SELECT * FROM charts"
# 執行指令
cursor.execute(command)
# 取得第一筆資料
result = cursor.fetchone()
print(result)
```
而要取得特定筆數的資料,可以透過fetchmany()方法,傳入所需的筆數,如下範例:
```
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料指令
command = "SELECT * FROM charts"
# 執行指令
cursor.execute(command)
# 取得前五筆資料
result = cursor.fetchmany(5)
print(result)
```
上述的查詢操作,皆是取回資料表中所有的資料,那要執行條件式的資料篩選,則可以加上WHERE語法,並且利用元組(Tuple)資料型態指定條件值,如下範例:
```
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 新增資料指令
command = "SELECT * FROM charts WHERE name = %s"
# 執行指令
cursor.execute(command, ("太陽",))
# 取得所有資料
result = cursor.fetchall()
print(result)
```
執行結果:
![](https://i.imgur.com/aIRkn2F.png)
## 修改資料表資料
假設要修改charts資料表中,id為5XeeDbHfELRucAOX6n的歌曲名稱(name)為Learn Code With Mike,需執行UPDATE的SQL語法,並且將主鍵(id)值及要修改的值(name)進行設定,最後透過Connection物件的commit()方法儲存。如下範例:
```
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 修改資料SQL語法
command = "UPDATE charts SET name = %s WHERE id = %s"
# 執行指令
cursor.execute(command, ("Learn Code With Mike", "5XeeDbHfELRucAOX6n"))
#儲存變更
conn.commit()
```
## 刪除資料表資料
如果要刪除charts資料表中,id為-ovxsQyee7WVLKuikC的資料,需執行DELETE的SQL語法,並且設定主鍵(id)值,最後透過Connection物件的commit()方法儲存。
```
# 建立Connection物件
conn = pymysql.connect(**db_settings)
# 建立Cursor物件
with conn.cursor() as cursor:
# 刪除特定資料指令
command = "DELETE FROM charts WHERE id = %s"
# 執行指令
cursor.execute(command, ("-ovxsQyee7WVLKuikC",))
#儲存變更
conn.commit()
```