---
# System prepended metadata

title: MySQL筆記

---

# MySQL筆記

第一次學MySQL資料庫，感覺需要做點語法統整不然會亂掉

## 資料庫初始化

下載跟pip install那些我就不紀錄了，這次著重在語法

### 連接MySQL

首先要連接下載時就會生成的root

```python=
import mysql.connector

db = mysql.connector.connect(
    host = "localhost", # 因為是本機
    user = "root",
    password = "才不告訴你哩"
)
```

### 建立DB

再來就要建立database
```python=
myCursor = db.cursor() # 用cursor來操作db

myCursor.execute("CREATE DATABASE test_database") # MySQL很愛大寫字母
```

這樣就能把db連結到我剛剛創造的test_database了

```python=
db = mysql.connector.connect(
    host = "localhost", # 因為是本機
    user = "root",
    password = "才不告訴你哩",
    database = "test_database"
)
```

這樣就有非常非常基本的MySQL資料庫了

## table語法

TABLE有超 ~~~ 多東西可以玩

### 建立table

```python=
myCursor.execute("CREATE TABLE Person (name VARCHAR(50), age smallint UNSIGNED, personalID int PRIMARY KEY AUTO_INCREMENT)")
```

這代表我有個叫Person的table且Person有三個column，分別是只能有50個字元的name、二位數以內且大於0的age、每個人都不同且會自動產生的遞增personalID

### 查看column

用DESCRIBE來看

```python=
myCursor.execute("DESCRIBE Person")

for i in myCursor:
    print(i) # myCursor是可以迭代的，i是一個tuple
```

輸出長這樣

![](https://i.imgur.com/wNK8uXF.png)

### 插入資料

那要怎麼放資料到table裡呢

```python=
myCursor.execute("INSERT INTO Person (name, age) VALUES (%s, %s)", ("Weber", 17))
myCursor.execute("INSERT INTO Person (name, age) VALUES (%s, %s)", ("Amber", 22))
myCursor.execute("INSERT INTO Person (name, age) VALUES (%s, %s)", ("Jabey", 22))
# 用字串格式化插入資料
db.commit() # 不commit就不會存下來
```
小提醒，因為personalID是自動產生的，所以插入的時候不用寫

### 選取資料

這邊真的超重要也超好玩，首先是選取整個table的資料

```python=
myCursor.execute("SELECT * FROM Person")
# * 代表全域，跟HTML裡的一樣
for i in myCursor:
    print(i)
```

輸出結果長這樣

![](https://i.imgur.com/A5bwEd6.png)

也可以只選特定column中的資料

```python=
myCursor.execute("SELECT name FROM Person")

for i in myCursor:
    print(i)
```

這樣就能找到所有名字

![](https://i.imgur.com/HOWA3DZ.png)

還能針對資料做篩選

```python=
myCursor.execute("SELECT name FROM Person WHERE age = 22 ")

for i in myCursor:
    print(i)
```

這樣就能找到所有22歲的人

![](https://i.imgur.com/XIlyOdM.png)

更猛的是還能排序

```python=
myCursor.execute("SELECT name, personalID FROM Person WHERE age = 22 ORDER by personalID DESC")
# DESC是降序，ACS是升序
for i in myCursor:
    print(i)
```

![](https://i.imgur.com/1ERxp4M.png)

超酷的(o゜▽゜)o☆

### 修改column

首先可以添加column

```python=
myCursor.execute("ALTER TABLE Person ADD COLUMN favFood VARCHAR(50)")
```

變這樣

![](https://i.imgur.com/LHFK6Ys.png)

還能拋棄column

```python=
myCursor.execute("ALTER TABLE Person DROP favFood")
```

這樣就會變回來

![](https://i.imgur.com/J0Pq0Yf.png)

甚至能粗暴改變現有column

```python=
myCursor.execute("ALTER TABLE Person CHANGE age age mediumint UNSIGNED")
```

這樣age就能存到三位數

![](https://i.imgur.com/jKoDH6L.png)

目前這樣感覺就很夠了，先安內

