WeHelp
MySQL 是一套穩定、高效能的資料庫管理系統,是全球網頁開發與應用程式最常搭配的核心工具之一。
  1. MySQL 下載安裝
  2. 啟動、連線測試
  3. Database 管理
  4. SQL 資料表管理
  5. SQL 資料管理
  6. SQL 資料取得、篩選
  7. 欄位的資料型態
  8. 資料交易簡介、操作
  9. 使用者管理
  10. Python 程式連線
  11. Node.js 程式連線
  12. PHP 程式連線
SQL 資料表管理
在 MySQL 中,資料表的管理主要使用 **DDL(Data Definition Language,資料定義語言)**,常見指令包括: - `CREATE TABLE`:建立資料表 - `ALTER TABLE`:修改資料表結構 - `DROP TABLE`:刪除資料表 - `TRUNCATE TABLE`:清空資料表資料,但保留表結構 以下以 `students` 資料表為例。 --- ## 一、選擇資料庫 建立或操作資料表前,先選擇要使用的資料庫: ```sql USE school; ``` 如果資料庫尚未建立,可以先執行: ```sql CREATE DATABASE school; USE school; ``` --- ## 二、建立資料表 ### 1. 基本語法 ```sql CREATE TABLE 資料表名稱 ( 欄位名稱 資料型別 [限制條件], 欄位名稱 資料型別 [限制條件], ... ); ``` ### 2. 建立範例 ```sql CREATE TABLE students ( student_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, birth_date DATE, gender CHAR(1), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (student_id) ); ``` 說明: - `INT`:整數型別 - `VARCHAR(50)`:最多 50 個字元的字串 - `DATE`:日期 - `NOT NULL`:欄位不可為空值 - `UNIQUE`:欄位值不可重複 - `AUTO_INCREMENT`:每次新增資料時自動遞增 - `PRIMARY KEY`:主鍵,用來唯一識別每筆資料 - `DEFAULT CURRENT_TIMESTAMP`:預設使用目前時間 ### 3. 建立資料表並設定外鍵 ```sql CREATE TABLE courses ( course_id INT NOT NULL AUTO_INCREMENT, course_name VARCHAR(100) NOT NULL, teacher_id INT, PRIMARY KEY (course_id), FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id) ); ``` 其中 `teacher_id` 是外鍵,參照 `teachers` 資料表的 `teacher_id` 欄位。 ### 4. 避免資料表已存在時發生錯誤 ```sql CREATE TABLE IF NOT EXISTS students ( student_id INT PRIMARY KEY, name VARCHAR(50) NOT NULL ); ``` --- ## 三、查看資料表結構 ### 查看資料表清單 ```sql SHOW TABLES; ``` ### 查看資料表欄位結構 ```sql DESCRIBE students; ``` 或: ```sql DESC students; ``` ### 查看完整建表語法 ```sql SHOW CREATE TABLE students; ``` --- ## 四、修改資料表 修改資料表通常使用 `ALTER TABLE`。 ### 1. 新增欄位 ```sql ALTER TABLE students ADD phone VARCHAR(20); ``` 在指定欄位後新增: ```sql ALTER TABLE students ADD address VARCHAR(200) AFTER email; ``` 在第一個位置新增: ```sql ALTER TABLE students ADD status VARCHAR(20) FIRST; ``` --- ### 2. 修改欄位資料型別或限制 MySQL 可使用 `MODIFY COLUMN`: ```sql ALTER TABLE students MODIFY COLUMN name VARCHAR(100) NOT NULL; ``` 也可以使用 `CHANGE COLUMN` 同時修改欄位名稱: ```sql ALTER TABLE students CHANGE COLUMN name full_name VARCHAR(100) NOT NULL; ``` 差異: - `MODIFY COLUMN`:只修改欄位定義,不修改名稱 - `CHANGE COLUMN`:可以修改欄位名稱與定義 --- ### 3. 修改欄位名稱 ```sql ALTER TABLE students RENAME COLUMN full_name TO student_name; ``` 此語法適用於較新版本的 MySQL。也可以使用: ```sql ALTER TABLE students CHANGE COLUMN full_name student_name VARCHAR(100) NOT NULL; ``` --- ### 4. 刪除欄位 ```sql ALTER TABLE students DROP COLUMN phone; ``` 刪除欄位前應確認其中的資料不再需要,因為欄位及其資料會一併消失。 --- ### 5. 新增主鍵 ```sql ALTER TABLE students ADD PRIMARY KEY (student_id); ``` 如果原本已有主鍵,必須先刪除原主鍵: ```sql ALTER TABLE students DROP PRIMARY KEY; ``` --- ### 6. 新增唯一索引 ```sql ALTER TABLE students ADD CONSTRAINT unique_email UNIQUE (email); ``` 也可以使用: ```sql CREATE UNIQUE INDEX unique_email ON students (email); ``` --- ### 7. 新增一般索引 ```sql CREATE INDEX idx_student_name ON students (student_name); ``` 索引可以提升查詢速度,但過多索引可能降低新增、修改資料的效能。 --- ### 8. 新增外鍵 ```sql ALTER TABLE courses ADD CONSTRAINT fk_teacher FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id); ``` 如果需要設定級聯操作: ```sql ALTER TABLE courses ADD CONSTRAINT fk_teacher FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id) ON DELETE CASCADE ON UPDATE CASCADE; ``` - `ON DELETE CASCADE`:被參照資料刪除時,相關資料一併刪除 - `ON UPDATE CASCADE`:被參照鍵值更新時,相關資料一併更新 --- ### 9. 修改資料表名稱 ```sql RENAME TABLE students TO school_students; ``` 或: ```sql ALTER TABLE school_students RENAME TO students; ``` --- ## 五、刪除資料表 ### 1. 刪除資料表 ```sql DROP TABLE students; ``` 此操作會刪除: - 資料表結構 - 所有資料 - 索引 - 約束 通常無法直接復原,因此執行前應先備份。 ### 2. 只有資料表存在時才刪除 ```sql DROP TABLE IF EXISTS students; ``` ### 3. 一次刪除多個資料表 ```sql DROP TABLE students, courses; ``` 若資料表之間有外鍵關聯,可能需要先刪除子表,或暫時關閉外鍵檢查: ```sql SET FOREIGN_KEY_CHECKS = 0; DROP TABLE students, courses; SET FOREIGN_KEY_CHECKS = 1; ``` 使用時應特別小心,避免破壞資料關聯。 --- ## 六、清空資料表但保留結構 如果只想刪除資料,不刪除資料表: ```sql TRUNCATE TABLE students; ``` `TRUNCATE TABLE` 與 `DELETE` 的差異: ```sql DELETE FROM students; ``` | 指令 | 結果 | |---|---| | `DELETE FROM students` | 逐筆刪除資料,可搭配 `WHERE` | | `TRUNCATE TABLE students` | 快速清空全部資料,不可搭配 `WHERE` | | `DROP TABLE students` | 刪除資料表及其結構 | 例如只刪除特定資料: ```sql DELETE FROM students WHERE student_id = 3; ``` --- ## 七、完整操作範例 ```sql CREATE DATABASE IF NOT EXISTS school; USE school; CREATE TABLE IF NOT EXISTS students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE students ADD phone VARCHAR(20); ALTER TABLE students MODIFY COLUMN name VARCHAR(100) NOT NULL; CREATE INDEX idx_students_name ON students (name); DESC students; -- 清空所有資料,但保留資料表 TRUNCATE TABLE students; -- 刪除資料表 DROP TABLE IF EXISTS students; ``` 操作 `DROP TABLE`、`TRUNCATE TABLE` 或刪除欄位前,建議先確認資料並進行備份,以免造成不可逆的資料遺失。
相關學習地圖、教學課程
Python 後端工程、資料庫
從 0 開始,成為後端工程師的學習路徑。