本篇重點
- 了解 DML、DDL、DCL 和 DQL 分別是資料庫裡的哪些功能
在資料庫管理中,DML、DDL、DCL 和 DQL 是資料庫領域中的四種類型,它們各自負責著不同的任務。
DDL (Data Definition Language) 數據定義語言
DDL用於定義和管理資料庫結構。
包括創建、修改和刪除資料庫、資料表、索引等對象的操作。
常見指令
- CREATE:建立資料庫的物件 (資料表、索引等)
- DESCRIBE:查詢資料表的結構資訊
- ALTER:修改現有資料庫對象的結構 (新增欄位、修改資料型別等)
- TRUNCATE:刪除資料表中的所有資料,但保留資料表的結構
- DROP:刪除資料庫的物件 (資料表、索引等)
舉例
創建資料庫
mysql| 12
 3
 4
 
 | CREATE DATABASE [資料庫名稱];
 // 創建 "mydatabase" 資料庫
 CREATE DATABASE mydatabase;
 
 | 
 創建資料表
mysql| 12
 3
 4
 5
 6
 7
 8
 
 | CREATE TABLE [資料表名稱];
 // 創建 "customers" 資料表
 CREATE TABLE customers (
 id INT AUTO_INCREMENT PRIMARY KEY,
 name VARCHAR(50),
 email VARCHAR(100)
 );
 
 | 
 查詢資料表的結構資訊
mysql| 12
 3
 4
 
 | DESCRIBE [資料表名稱];
 // 查看 "customers" 資料表結構資訊
 DESCRIBE customers;
 
 | 
 修改資料表結構
mysql| 12
 3
 4
 5
 6
 7
 
 | ALTER TABLE [資料表名稱] [修改事項];
 // "customers" 資料表新增一個欄位 "phone"
 ALTER TABLE customers ADD phone VARCHAR(20);
 
 // 刪除 "customers" 資料表的 "phone" 欄位
 ALTER TABLE customers DROP COLUMN phone;
 
 | 
 清空資料表所有資料
mysql| 12
 3
 4
 
 | TRUNCATE TABLE [資料表名稱];
 // 清空 "customers" 資料表內所有內容
 TRUNCATE TABLE customers;
 
 | 
 刪除資料表
mysql| 12
 3
 4
 
 | DROP TABLE [資料表名稱];
 // 刪除 "customers" 資料表
 DROP TABLE customers;
 
 | 
 刪除資料功能 (TRUNCATE 指令或刪除資料表的欄位等) 無法回滾(Rollback),一旦執行就無法還原被刪除的資料。在使用刪除功能時,請再三確認要刪除的資料。
DML (Data Manipulation Language) 數據操作語言
DML 是用於操作和處理資料。
包括對資料進行插入、更新和刪除等操作。
常見指令
- INSERT INTO:新增資料到資料表中
- UPDATE:更改資料表中的資料
- DELETE:刪除資料表中的資料
在一些資料庫系統中,SELECT 指令也可能被視為 DML 指令的一部分,這取決於特定資料庫的標準。但在 MySQL 中,通常將 SELECT 指令歸類為 DQL 指令。
舉例
新增資料
mysql| 12
 3
 4
 
 | INSERT INTO [資料庫名稱] ([欄位]) VALUES ([值]);
 // 在 "customers" 資料表新增一筆客戶資料
 INSERT INTO customers (name, email) VALUES ('John', 'john@example.com');
 
 | 
 更新資料
mysql| 12
 3
 4
 
 | UPDATE [資料庫名稱] SET [修改值] WHERE [條件];
 // 在 "customers" 資料表更新一筆客戶資料
 UPDATE customers SET email = 'newJohn@example.com' WHERE name = 'John';
 
 | 
 刪除資料
mysql| 12
 3
 4
 
 | DELETE FROM [資料庫名稱] WHERE [條件];
 // 在 "customers" 資料表刪除一筆客戶資料
 DELETE FROM customers WHERE name = 'John';
 
 | 
  DQL (Data Query Language) 數據查詢語言
DQL 用於查詢資料庫的資料。
主要目的是檢索所需的數據,而不涉及對數據進行修改。
常見指令
- SELECT:查詢資料庫中的資料
- WHERE:條件篩選資料
- DISTINCT:檢索唯一的資料值
- ORDER BY:依指定的欄位排序資料
- GROUP BY:依指定的欄位分組
舉例
查詢資料
mysql| 12
 3
 4
 
 | SELECT [欄位名稱] FROM [資料表名稱];
 // 搜索 table_name 資料表內所有欄位的資料
 SELECT * FROM table_name;
 
 | 
 篩選條件
mysql| 12
 3
 4
 
 | SELECT [欄位名稱] FROM [資料表名稱] WHERE [篩選條件];
 // 搜索 table_name 資料表內 uid = 123 的資料
 SELECT * FROM table_name WHERE uid = 123;
 
 | 
 搜索唯一值
mysql| 12
 3
 4
 
 | SELECT DISTINCT [欄位名稱] FROM [資料表名稱];
 // 搜索 order_list 資料表內 uid 唯一值的資料
 SELECT DISTINCT uid FROM order_list;
 
 | 
 依指定欄位排序資料
mysql| 12
 3
 4
 5
 6
 7
 
 | SELECT [欄位名稱] FROM [資料表名稱] ORDER BY [欄位名稱] (ASC/DESC);
 // 搜索 order_list 資料表內所有資料並以uid做排序
 SELECT * FROM order_list ORDER BY uid;
 
 // 設定順序由大排到小
 SELECT * FROM order_list ORDER BY uid DESC;
 
 | 
 ORDER BY 未指定排序,預設使用 ASC (升冪),順序由小排到大,如果想要由大排到小,可以設定 ORDER BY [欄位名稱] DESC;
依指定的欄位分組
mysql| 12
 3
 4
 
 | SELECT [欄位名稱] FROM [資料表名稱] GROUP BY [欄位名稱];
 // 依 team 去分組,計算每組的人數
 SELECT team, COUNT(*) FROM table_name GROUP BY team;
 
 | 
  DCL (Data Control Language) 數據控制語言
DCL 用於控制資料庫的使用權限和訪問權限。
包括授予、撤銷用戶的權限,以及確保資料庫的安全性和完整性。
常見指令
- CREATE USER:創建新的使用者
- DROP USER:刪除現有的使用者
- GRANT:授予使用者特定的權限和許可權
- REVOKE:撤銷使用者的特定權限和許可權
舉例
創建新的使用者
mysql| 12
 3
 4
 
 | CREATE USER [使用者名稱]@[IP位置或主機名] IDENTIFIED BY 'password';
 // 創建新使用者 "mary",並設定密碼
 CREATE USER 'mary'@'localhost' IDENTIFIED BY 'password';
 
 | 
 IDENTIFIED BY 是用於設定使用者密碼的指令,可以省略這個指令讓使用者直接進入資料庫,但這樣就有安全性的問題
刪除現有的使用者
mysql| 12
 3
 4
 
 | DROP USER [使用者名稱]@[IP位置或主機名];
 // 刪除資料庫使用者 "mary"
 DROP USER 'mary'@'localhost';
 
 | 
 授予權限
mysql| 12
 3
 4
 
 | GRANT [權限] ON [資料庫名稱].* TO [使用者名稱]@[IP位置或主機名];
 // 授予 "john" 在 my_database 搜尋和寫入和刪除的權限
 GRANT SELECT, INSERT, DELETE ON my_database.* TO 'john'@'localhost';
 
 | 
 ‘john‘@’localhost’ 是用來指定使用者帳號和使用者連接的 IP,指定連接 IP 確保資料庫的安全性
my_database.* 是指定 my_database 資料庫的所有資料表,也可以指定特定資料表的權限,例如 my_database.my_table
收回權限
mysql| 12
 3
 4
 
 | REVOKE [權限] ON [資料庫名稱].* FROM [使用者名稱]@[IP位置或主機名];
 // 收回 "john" 在 my_database 刪除的權限
 REVOKE DELETE ON my_database.* FROM 'john'@'localhost';
 
 | 
 結論
有一次在看 MySQL 文件的時候裡面提到 DQL,但也沒有特別解釋什麼是 DQL,後來去查才知道這是資料庫語言類型,感覺很容易忘記所以有了這篇😆
- DDL:定義和管理資料庫結構
- DML:操作和處理資料
- DQL:查詢資料庫的資料
- DCL:控制資料庫的使用權限和訪問權限。