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