一篇文章,徹底理解數據庫操作語言:DDL、DML、DCL、TCL
最近與開發和運維討論數據庫賬號及賦權問題時,發現大家對DDL和DML兩個概念并不了解。于是寫一篇文章,系統的整理一下在數據庫領域中的DDL、DML、DQL、DCL的使用及區別。
通常,數據庫SQL語言共分為四大類:數據定義語言DDL,數據操作語言DML,數據查詢語言DQL,數據控制語言DCL。再加上事務控制語言TCL,一個共5個。
下面,我們就詳細了解一下它們。
數據定義語言DDL
DDL(Data Definition Language)是數據定義語言,它用于定義或改變數據庫或表的結構等初始化工作上。通常,包括數據類型、表(Table)之間的關系以及數據庫(Database)中的約束、索引、視圖、存儲過程、觸發器等。
DDL命令通常用于創建數據庫模式,例如CREATE
、ALTER
、DROP
、TRUNCATE
、RENAME
、COMMENT
等。這些命令一旦執行,就無法被撤銷,因為它們改變了數據庫的結構。
DDL常見命令及使用
CREATE
:用來創建數據庫、表、索引等對象。例如:
CREATE DATABASE testDB; --創建一個名為testDB的數據庫
CREATE TABLE Students (ID INT, Name TEXT); --創建一個名為Students的表,包含ID和Name兩個字段
ALTER
:用來修改已存在的數據庫對象。例如,
ALTER TABLE Students ADD Grade INT; --在Students表中添加一個名為Grade的字段
ALTER TABLE Students DROP COLUMN Grade; --在Students表中刪除名為Grade的字段
DROP
:用來刪除整個數據庫或者數據庫中的表。例如,
DROP DATABASE testDB; --刪除名為testDB的數據庫
DROP TABLE Students; --刪除Students表
TRUNCATE
:用來刪除表中所有的行,但不刪除表本身。例如,
TRUNCATE TABLE Students; --刪除Students表中的所有數據,但不刪除表本身
RENAME
:用來重命名數據庫或者表。例如,
ALTER TABLE Students RENAME TO Pupils; --將Students表重命名為Pupils
COMMENT
:用來為數據庫對象如表、列添加注釋。例如,
COMMENT ON COLUMN Students.Name IS 'Student Name'; --在Students表的Name列上添加注釋'Student Name'
以上是幾種常見的DDL命令示例,不同的數據庫系統可能語法稍有不同,使用時需要參考對應數據庫的文檔。
數據操作語言DML
DML(Data Manipulation Language)是數據操作語言,用于管理和檢索數據庫中的數據。適用于對數據庫中的數據進行一些簡單操作,比如增刪改查表中的數據。
DML命令用于處理表中的記錄,例如INSERT
(插入)、UPDATE
(更新)、SELECT
(查詢)、DELETE
(刪除)等。這些命令不會影響數據庫的結構,而是直接作用于數據本身。如果執行了錯誤的操作,可以通過回滾機制來取消這些操作。
需要注意的是,DML命令不會自動提交,而且是可以回滾操作。
常用的語句關鍵字有:SELECT
、INSERT
、UPDATE
、DELETE
、MERGE
、CALL
、EXPLAIN PLAN
、LOCK TABLE
。
DML常見命令及使用
以下的例子基于 SQL 語言:
SELECT
:從數據庫中檢索數據。例如,
SELECT * FROM Students; --選擇Students表中的所有數據
SELECT Name, Grade FROM Students; --選擇Students表中的Name和Grade數據
INSERT
:在表中插入新的數據。例如,
INSERT INTO Students (ID, Name, Age)
VALUES (1, 'Tom', 18); --在Students表中插入一條新的數據
UPDATE
:更新數據庫表中的數據。例如,
UPDATE Students
SET Age = 19
WHERE ID = 1; --將Students表中ID為1的記錄的Age設置為19
DELETE
:從數據庫中刪除數據。例如,
DELETE FROM Students
WHERE ID = 1; --刪除Students表中ID為1的數據
MERGE
:合并兩張表或更改其中一張表的數據。例如,
MERGE INTO Students AS Target
USING (SELECT ID, Name FROM Enrolled_Students) AS Source
ON Target.ID = Source.ID
WHEN MATCHED THEN
UPDATE SET Name = Source.Name
WHEN NOT MATCHED THEN
INSERT (ID, Name) VALUES (Source.ID, Source.Name); --更新已存在的記錄或插入新的記錄
CALL
:調用一個存儲過程。例如,
CALL Update_Students_Age(18); -- 調用名為“Update_Students_Age”的存儲過程
EXPLAIN PLAN
:提供一條查詢語句的執行計劃。例如,
EXPLAIN PLAN FOR SELECT * FROM Students; -- 顯示查詢所有學生數據的執行計劃
LOCK TABLE
:對數據庫表進行鎖定,以控制并發讀寫。例如,
LOCK TABLE Students IN EXCLUSIVE MODE; -- 對Students表施加獨占鎖
以上是幾種常見的DML命令示例,不同的數據庫系統可能語法稍有不同,具體使用時需要參考對應數據庫的文檔。
數據控制語言DCL
DCL(Data Control Language)數據控制語言:主要用于控制用戶對數據庫的訪問權限以及對數據的執行權限。常見的DCL語句包括GRANT、REVOKE等。
DCL主要包括兩種SQL命令,分別是GRANT和REVOKE。
GRANT
:該命令用于授予用戶對數據庫對象(例如表格)的訪問權限。下面是一個例子:
GRANT SELECT, INSERT, UPDATE ON Students TO user1;
在這個例子中,給 "user1" 授予了對 "Students" 表進行 SELECT、INSERT 和 UPDATE 的權限。
REVOKE
:該命令用于撤回已經授予用戶的某些權限。
下面是一個例子:
REVOKE UPDATE ON Students FROM user1;
在這個例子中,撤回了 "user1" 對 "Students" 表的 UPDATE 權限。
使用DCL,數據庫管理員可以精細化管理數據庫的訪問權限,保護數據的安全性。
注意,這些命令的具體語法和使用可能會根據使用的數據庫系統而有所不同,所以在實際使用時,需要參考相應數據庫的具體文檔。
數據查詢語言DQL
DQL(Data Query Language)數據查詢語言:主要用來查詢數據。實際上,DQL在操作中主要體現為SQL的SELECT語句。
例如,我們有一個學生表(Students)包括ID, 名字(Name), 年齡(Age)等字段:
- 查詢所有數據:
SELECT * FROM Students;
這條命令會返回Students表中的所有行和列。
- 查詢部分字段:
SELECT Name, Age FROM Students;
這條命令僅返回Name和Age字段的數據。
- 對查詢結果進行篩選:
SELECT * FROM Students WHERE Age > 18;
這條命令只返回年齡大于18的學生數據。
- 對查詢結果進行排序:
SELECT * FROM Students ORDER BY Age DESC;
這條命令將數據按照年齡降序排列后返回。
以上幾個例子展示了最基本的數據查詢操作,但是實際上SELECT語句的用法和技巧還有很多,例如聚合函數(如COUNT、SUM)、分組(GROUP BY)、連接(JOIN)等等。
事務控制語言TCL
TCL (Transaction Control Language) 是事務控制語言的簡稱,主要用來管理和控制數據庫中的事務(Transaction),以保證數據庫操作的完整性和一致性。
TCL命令往往和DML(數據操作語言)命令一起使用,以確保一系列的數據庫操作要么全部成功,要么全部不成功(可回滾至操作前的狀態)。
TCL 主要包括以下幾種命令:
COMMIT
:用于提交事務,將所有數據庫修改保存到數據庫中。
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
COMMIT; -- 提交事務,將插入的數據保存到數據庫中
ROLLBACK
:用于回滾事務,撤銷所有未經提交的數據庫修改。
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
ROLLBACK; -- 回滾事務,撤銷上一條插入命令
SAVEPOINT
:為事務中的一系列操作設定保存點。設立保存點后,可以選擇只回滾到保存點的部分,而不需要全部回滾。
SAVEPOINT SP1; -- 創建保存點 SP1
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
ROLLBACK TO SP1; -- 回滾至保存點 SP1,不會撤銷保存點后的操作
以上就是SQL中的TCL中的主要命令,用于確保數據庫的完整性和一致性。
小結
本篇文章以具體的SQL語句講解了數據庫SQL語言四大分類(數據定義語言DDL,數據操作語言DML,數據查詢語言DQL,數據控制語言DCL),同時也介紹了事務控制語言TCL。
針對不同的數據庫,具體的SQL可能有所不同,但分類思想和功能基本相同。在上述英文縮寫的記憶中,建議通過英文原文,特別是中間的英文字母來輔助記憶。