建立、修改資料表
以下以常見的 SQL 語法說明如何**建立資料表**與**修改資料表欄位定義**。不同資料庫系統(MySQL、PostgreSQL、SQL Server、Oracle)在細節上可能略有差異。
## 一、建立資料表:`CREATE TABLE`
### 基本語法
```sql
CREATE TABLE 資料表名稱 (
欄位名稱 資料型別 [欄位約束],
欄位名稱 資料型別 [欄位約束],
...
);
```
### 範例
```sql
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
birth_date DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
上述資料表包含:
- `student_id`:整數,且為主鍵
- `name`:最多 50 個字元,不允許空值
- `email`:最多 100 個字元,不可重複
- `birth_date`:日期
- `created_at`:建立資料時自動填入目前時間
## 二、常見欄位約束
| 約束 | 說明 |
|---|---|
| `PRIMARY KEY` | 主鍵,用來唯一識別每筆資料 |
| `NOT NULL` | 欄位不可為空值 |
| `UNIQUE` | 欄位值不可重複 |
| `DEFAULT` | 未指定值時使用預設值 |
| `CHECK` | 限制欄位值必須符合條件 |
| `FOREIGN KEY` | 建立與其他資料表的關聯 |
例如:
```sql
CREATE TABLE orders (
order_id INT PRIMARY KEY,
student_id INT NOT NULL,
amount DECIMAL(10, 2) CHECK (amount >= 0),
FOREIGN KEY (student_id) REFERENCES students(student_id)
);
```
## 三、修改資料表:`ALTER TABLE`
### 1. 新增欄位:`ADD`
```sql
ALTER TABLE students
ADD phone VARCHAR(20);
```
部分資料庫也支援:
```sql
ALTER TABLE students
ADD COLUMN phone VARCHAR(20);
```
### 2. 修改欄位資料型別或定義
#### MySQL
```sql
ALTER TABLE students
MODIFY COLUMN name VARCHAR(100) NOT NULL;
```
#### PostgreSQL
```sql
ALTER TABLE students
ALTER COLUMN name TYPE VARCHAR(100);
```
#### SQL Server
```sql
ALTER TABLE students
ALTER COLUMN name VARCHAR(100) NOT NULL;
```
不同資料庫的語法不完全相同,因此應依使用的資料庫系統調整。
### 3. 重新命名欄位
常見寫法:
```sql
ALTER TABLE students
RENAME COLUMN name TO student_name;
```
SQL Server 通常使用:
```sql
EXEC sp_rename 'students.name', 'student_name', 'COLUMN';
```
### 4. 刪除欄位:`DROP COLUMN`
```sql
ALTER TABLE students
DROP COLUMN phone;
```
刪除欄位前應確認資料是否仍需要,因為欄位中的資料通常也會一併刪除。
### 5. 新增或刪除約束
新增主鍵:
```sql
ALTER TABLE students
ADD CONSTRAINT pk_students PRIMARY KEY (student_id);
```
新增外鍵:
```sql
ALTER TABLE orders
ADD CONSTRAINT fk_orders_students
FOREIGN KEY (student_id)
REFERENCES students(student_id);
```
刪除約束時,必須使用該約束名稱:
```sql
ALTER TABLE orders
DROP CONSTRAINT fk_orders_students;
```
MySQL 常見語法為:
```sql
ALTER TABLE orders
DROP FOREIGN KEY fk_orders_students;
```
## 四、修改欄位時的注意事項
1. 修改資料型別前,確認現有資料可以轉換。
2. 將欄位改成 `NOT NULL` 前,必須先處理原本的空值資料。
3. 刪除欄位或約束前,確認沒有程式或其他資料表依賴它。
4. 生產環境執行 `ALTER TABLE` 前,建議先備份資料。
5. 欄位名稱、資料表名稱若與保留字相同,應使用資料庫支援的引號或跳脫符號。
簡單來說:
- 建立資料表:使用 `CREATE TABLE`
- 修改資料表結構:使用 `ALTER TABLE`
- 新增欄位:`ADD`
- 修改欄位:依資料庫使用 `MODIFY`、`ALTER COLUMN` 等語法
- 刪除欄位:`DROP COLUMN`
相關學習地圖、教學課程
Python 資料工程
Python 後端工程、資料庫