做到哪一步才算精通SQL-Structured Query Language
- 數據定義語言 DDL for Struct
- CREATE:用來創建數據庫、表、索引等對象
- ALTER:用來修改已存在的數據庫對象
- DROP:用來刪除整個數據庫或者數據庫中的表
- TRUNCATE:用來刪除表中所有的行,但不刪除表本身
- RENAME:用來重命名數據庫或者表
- COMMENT:用來為數據庫對象如表、列添加注釋
- 數據操作語言 DML for Data
- MERGE:合并兩張表或更改其中一張表的數據
- CALL:調用一個存儲過程
- EXPLAIN PLAN:提供一條查詢語句的執行計劃 - 工作中未用到,待學習中
- LOCK TABLE:對數據庫表進行鎖定,以控制并發讀寫 - 工作中未用到,待學習中
- 數據控制語言 DCL for permission
- GRANT:該命令用于授予用戶對數據庫對象(例如表格)的訪問權限
- REVOKE:該命令用于撤回已經授予用戶的某些權限
- 數據查詢語言 DQL
- 事務控制語言 TCL
- COMMIT:用于提交事務,將所有數據庫修改保存到數據庫中
- ROLLBACK:用于回滾事務,撤銷所有未經提交的數據庫修改
- AVEPOINT:為事務中的一系列操作設定保存點
ref [基礎語法與操作](https://blog.csdn.net/pantouyuchiyu/article/details/135937701)
數據定義語言 DDL for Struct
- DDL(Data Definition Language)數據庫定義語言,
- 用于定義或改變數據表結構、數據類型、
- 表之間的關系、庫的索引、約束、視圖、存儲過程、觸發器等。
CREATE
、ALTER
、DROP
、TRUNCATE
、RENAME
、COMMENT
等命令一旦執行,就無法被撤銷,因為它們改變了數據庫的結構。
CREATE:用來創建數據庫、表、索引等對象
CREATE DATABASE testDB; -- 創建一個名為testDB的數據庫
CREATE TABLE Students (ID INT, Name TEXT); -- 創建一個名為Students的表,包含ID和Name兩個字段
CREATE INDEX index_name ON Students (Name desc); -- 常見簡單索引 name 逆序
CREATE UNIQUE INDEX index_id on Students (ID); -- 常見唯一索引 id
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'
數據操作語言 DML for Data
- DML(Data Manipulation Language)是數據操作語言,用于管理和檢索數據庫中的數據。
適用于對數據庫中的數據進行一些簡單操作,比如增刪改查表中的數據。 - 常用的語句關鍵字有:
SELECT
、INSERT
、UPDATE
、DELETE
、MERGE
、CALL
、EXPLAIN PLAN
、LOCK TABLE
。 - 作用于數據本身,如果執行了錯誤的操作,可以通過
回滾機制
來取消這些操作。
SELECT * FROM Students; --選擇Students表中的所有數據
SELECT Name, Grade FROM Students; --選擇Students表中的Name和Grade數據# 在Students表中插入一條新的數據
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18); # 將Students表中ID為1的記錄的Age設置為19
UPDATE Students SET Age = 19 WHERE ID = 1;# 刪除Students表中ID為1的數據
DELETE FROM Students WHERE ID = 1;
MERGE:合并兩張表或更改其中一張表的數據
# 根據ID進行匹配,向Students中更新或插入來自Enrolled_Students中的數據
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); # MySQL 在 8.0 之前不支持 MERGE 語句,
# 需要使用 INSERT ... ON DUPLICATE KEY UPDATE 來實現類似的功能
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表施加獨占鎖
數據控制語言 DCL for permission
- DCL(Data Control Language)數據控制語言:主要用于控制用戶對數據庫的訪問權限以及對數據的執行權限。
- 使用DCL,數據庫管理員可以精細化管理數據庫的訪問權限,保護數據的安全性。
- 常見的DCL語句包括GRANT、REVOKE等。
GRANT:該命令用于授予用戶對數據庫對象(例如表格)的訪問權限
GRANT SELECT, INSERT, UPDATE ON Students TO hugh;
# 給 "hugh" 授予了對 "Students" 表進行 SELECT、INSERT 和 UPDATE 的權限
REVOKE:該命令用于撤回已經授予用戶的某些權限
REVOKE UPDATE ON Students FROM hugh;
撤回了 "hugh" 對 "Students" 表的 UPDATE 權限。
數據查詢語言 DQL
DQL(Data Query Language)數據查詢語言:主要用來查詢數據。
實際上,DQL在操作中主要體現為SQL的SELECT語句。
事務控制語言 TCL
- TCL (Transaction Control Language) 是事務控制語言,
- 主要用來管理和控制數據庫中的事務(Transaction),以保證數據庫操作的完整性和一致性。
- TCL命令往往和DML(數據操作語言)命令一起使用,以確保一系列的數據庫操作要么全部成功,要么全部不成功(可回滾至操作前的狀態)。
COMMIT:用于提交事務,將所有數據庫修改保存到數據庫中
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
COMMIT; -- 提交事務,將插入的數據保存到數據庫中
ROLLBACK:用于回滾事務,撤銷所有未經提交的數據庫修改
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
COMMIT; -- 提交事務,將插入的數據保存到數據庫中
AVEPOINT:為事務中的一系列操作設定保存點
設立保存點后,可以選擇只回滾到保存點的部分,而不需要全部回滾
SAVEPOINT SP1; -- 創建保存點 SP1
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
ROLLBACK TO SP1; -- 回滾至保存點 SP1,不會撤銷保存點后的操作