WeHelp
PostgreSQL 是一套免費、開源的強大物件關聯式資料庫管理系統,適合處理複雜的結構化資料與高負載應用程式。
  1. PostgreSQL 下載安裝
  2. 啟動、連線測試
  3. Database 管理
  4. Schema 管理
  5. SQL 資料表管理
  6. SQL 資料管理
  7. SQL 資料取得、篩選
  8. 欄位的資料型態
  9. 資料交易簡介、操作
  10. 使用者管理
  11. Python 程式連線
  12. Node.js 程式連線
  13. C# 程式連線
SQL 資料管理
在 PostgreSQL 中,管理資料表內的資料主要使用以下 SQL 指令: - `INSERT`:新增資料 - `UPDATE`:修改資料 - `DELETE`:刪除資料 - `SELECT`:查詢與確認資料 以下以 `employees` 資料表為例: ```sql CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, salary NUMERIC(10, 2), department VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ## 1. 新增資料:INSERT ### 新增單筆資料 ```sql INSERT INTO employees (name, email, salary, department) VALUES ('王小明', 'ming@example.com', 50000, 'IT'); ``` ### 新增多筆資料 ```sql INSERT INTO employees (name, email, salary, department) VALUES ('陳美華', 'mei@example.com', 60000, 'HR'), ('林志強', 'chiang@example.com', 55000, 'Sales'); ``` ### 新增後取得自動產生的資料 PostgreSQL 支援 `RETURNING`: ```sql INSERT INTO employees (name, email, salary, department) VALUES ('李大華', 'hua@example.com', 58000, 'Finance') RETURNING id, name, created_at; ``` ### 避免唯一鍵重複 如果 `email` 已存在,可以忽略這筆資料: ```sql INSERT INTO employees (name, email, salary, department) VALUES ('王小明', 'ming@example.com', 50000, 'IT') ON CONFLICT (email) DO NOTHING; ``` 也可以在發生衝突時更新資料: ```sql INSERT INTO employees (name, email, salary, department) VALUES ('王小明', 'ming@example.com', 52000, 'IT') ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name, salary = EXCLUDED.salary, department = EXCLUDED.department; ``` `EXCLUDED` 代表這次準備插入、但與現有資料衝突的值。 --- ## 2. 修改資料:UPDATE ### 修改指定資料 ```sql UPDATE employees SET salary = 55000 WHERE id = 1; ``` ### 同時修改多個欄位 ```sql UPDATE employees SET salary = 60000, department = 'Management' WHERE id = 1; ``` ### 依條件修改多筆資料 ```sql UPDATE employees SET salary = salary * 1.05 WHERE department = 'IT'; ``` 這會將 IT 部門所有員工的薪資調高 5%。 ### 使用其他欄位計算新值 ```sql UPDATE employees SET salary = salary + 3000 WHERE salary < 50000; ``` ### 修改後查看結果 ```sql UPDATE employees SET salary = 65000 WHERE id = 1 RETURNING *; ``` ### 設定欄位為 NULL ```sql UPDATE employees SET department = NULL WHERE id = 1; ``` 但如果欄位設定了 `NOT NULL`,就不能指定為 `NULL`。 > 注意:`UPDATE` 如果省略 `WHERE`,會修改整個資料表的所有資料。 ```sql -- 危險:會修改所有員工 UPDATE employees SET salary = 0; ``` --- ## 3. 刪除資料:DELETE ### 刪除指定資料 ```sql DELETE FROM employees WHERE id = 1; ``` ### 依條件刪除多筆資料 ```sql DELETE FROM employees WHERE department = 'Temporary'; ``` ### 刪除後取得被刪除的資料 ```sql DELETE FROM employees WHERE id = 2 RETURNING *; ``` ### 刪除全部資料 ```sql DELETE FROM employees; ``` 這會刪除資料,但通常不會重設 `SERIAL` 或 `IDENTITY` 的流水號。 > 注意:`DELETE` 如果省略 `WHERE`,會刪除資料表中的所有資料。 若確定要清空資料表,也可以使用: ```sql TRUNCATE TABLE employees; ``` 若要同時重設自動編號: ```sql TRUNCATE TABLE employees RESTART IDENTITY; ``` 如果有外鍵參照其他資料表,可能需要: ```sql TRUNCATE TABLE employees RESTART IDENTITY CASCADE; ``` 使用 `CASCADE` 時要特別小心,因為可能連相關資料表的資料一併清除。 --- ## 4. 查詢資料確認結果:SELECT ```sql SELECT * FROM employees; ``` 查詢特定欄位: ```sql SELECT id, name, salary FROM employees WHERE department = 'IT'; ``` 排序: ```sql SELECT * FROM employees ORDER BY salary DESC; ``` 限制筆數: ```sql SELECT * FROM employees LIMIT 10; ``` --- ## 5. 使用交易確保操作安全 對重要的新增、修改或刪除操作,可以使用交易: ```sql BEGIN; UPDATE employees SET salary = salary * 1.1 WHERE department = 'IT'; -- 確認結果 SELECT * FROM employees WHERE department = 'IT'; -- 確定無誤後提交 COMMIT; ``` 如果發現操作錯誤,可以復原: ```sql BEGIN; DELETE FROM employees WHERE department = 'Temporary'; -- 發現刪錯時 ROLLBACK; ``` - `COMMIT`:正式儲存變更 - `ROLLBACK`:取消交易中的變更 --- ## 常用指令總結 ```sql -- 新增 INSERT INTO employees (name, email, salary) VALUES ('張三', 'zhang@example.com', 45000); -- 修改 UPDATE employees SET salary = 48000 WHERE email = 'zhang@example.com'; -- 刪除 DELETE FROM employees WHERE email = 'zhang@example.com'; -- 查詢 SELECT * FROM employees; ``` 實務上執行 `UPDATE` 或 `DELETE` 前,建議先使用相同的 `WHERE` 條件執行 `SELECT` 確認目標資料,避免因條件錯誤而修改或刪除大量資料。
相關學習地圖、教學課程
Python 資料工程
從 0 開始,成為資料工程師的學習路徑。