SQL 資料管理
在 MySQL 中,管理資料表內的資料主要使用 `INSERT`、`UPDATE` 與 `DELETE` 三種 SQL 指令。以下以 `users` 資料表為例:
```sql
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
## 1. 新增資料:`INSERT`
### 新增單筆資料
```sql
INSERT INTO users (name, email, age)
VALUES ('王小明', 'ming@example.com', 25);
```
`id` 和 `created_at` 會使用資料表定義的預設值。
### 一次新增多筆資料
```sql
INSERT INTO users (name, email, age)
VALUES
('陳小華', 'hua@example.com', 30),
('林小美', 'mei@example.com', 28),
('張大偉', 'wei@example.com', 35);
```
### 使用 `INSERT ... SET`
```sql
INSERT INTO users
SET
name = '李小安',
email = 'an@example.com',
age = 22;
```
一般較常使用第一種 `INSERT INTO ... VALUES` 寫法。
---
## 2. 修改資料:`UPDATE`
### 修改指定資料
```sql
UPDATE users
SET age = 26
WHERE id = 1;
```
將 `id` 為 `1` 的使用者年齡修改為 `26`。
### 同時修改多個欄位
```sql
UPDATE users
SET
name = '王大明',
email = 'daming@example.com'
WHERE id = 1;
```
### 依條件批次修改
```sql
UPDATE users
SET age = age + 1
WHERE age >= 30;
```
將所有年齡大於或等於 30 歲的使用者年齡增加一歲。
> **注意:** `UPDATE` 若省略 `WHERE`,會修改整張資料表的所有資料。
```sql
-- 危險:會把所有使用者的年齡改成 18
UPDATE users
SET age = 18;
```
---
## 3. 刪除資料:`DELETE`
### 刪除指定資料
```sql
DELETE FROM users
WHERE id = 1;
```
刪除 `id` 為 `1` 的資料。
### 依條件刪除多筆資料
```sql
DELETE FROM users
WHERE age < 18;
```
刪除所有未滿 18 歲的使用者。
> **注意:** `DELETE` 若省略 `WHERE`,會刪除整張資料表中的所有資料。
```sql
-- 危險:刪除 users 表中的所有資料
DELETE FROM users;
```
---
## 4. 查詢資料確認結果:`SELECT`
新增、修改或刪除後,可以使用 `SELECT` 確認:
```sql
SELECT * FROM users;
```
查詢特定資料:
```sql
SELECT id, name, email
FROM users
WHERE id = 1;
```
---
## 5. 使用交易避免誤操作
進行重要的修改或刪除時,可以使用交易:
```sql
START TRANSACTION;
UPDATE users
SET age = 27
WHERE id = 1;
-- 確認結果後提交
COMMIT;
```
如果發現操作錯誤,可以復原:
```sql
START TRANSACTION;
DELETE FROM users
WHERE id = 1;
-- 復原刪除操作
ROLLBACK;
```
注意:`ROLLBACK` 是否有效,通常取決於資料表使用的儲存引擎,例如 `InnoDB` 支援交易。
---
## 常用指令整理
| 操作 | SQL 指令 |
|---|---|
| 新增資料 | `INSERT INTO` |
| 修改資料 | `UPDATE ... SET` |
| 刪除資料 | `DELETE FROM` |
| 查詢資料 | `SELECT` |
| 提交交易 | `COMMIT` |
| 復原交易 | `ROLLBACK` |
執行 `UPDATE` 或 `DELETE` 時,應先使用相同條件的 `SELECT` 確認即將被影響的資料,例如:
```sql
SELECT *
FROM users
WHERE age < 18;
```
確認無誤後,再執行:
```sql
DELETE FROM users
WHERE age < 18;
```
相關學習地圖、教學課程
Python 後端工程、資料庫