SQL 四大語言分類詳解:DDL、DML、DCL、DQL

SQL(結構化查詢語言)通常被分為四種主要類型,每種類型負責不同的數據庫操作。下面我將詳細介紹這四類SQL語言的語法和用途。

一、DDL (Data Definition Language) 數據定義語言

功能:定義和管理數據庫對象結構(表、視圖、索引等)

主要命令:

CREATE?- 創建數據庫對象

-- 創建數據庫
CREATE DATABASE school;-- 創建表
CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT CHECK (age > 0),class_id INT,FOREIGN KEY (class_id) REFERENCES classes(id)
);-- 創建索引
CREATE INDEX idx_name ON students(name);-- 創建視圖
CREATE VIEW student_view AS
SELECT id, name FROM students WHERE age > 10;

ALTER?- 修改數據庫對象

-- 添加列
ALTER TABLE students ADD COLUMN gender CHAR(1);-- 修改列類型
ALTER TABLE students MODIFY COLUMN name VARCHAR(100);-- 刪除列
ALTER TABLE students DROP COLUMN gender;

DROP?- 刪除數據庫對象

DROP TABLE IF EXISTS temp_students;
DROP VIEW student_view;

TRUNCATE?- 清空表數據(保留結構)

TRUNCATE TABLE log_data;

二、DML (Data Manipulation Language) 數據操作語言

功能:操作數據庫中的數據記錄

主要命令:

  1. INSERT?- 插入數據

-- 插入單條記錄
INSERT INTO students (name, age, class_id)
VALUES ('張三', 15, 1);-- 插入多條記錄
INSERT INTO students (name, age, class_id)
VALUES ('李四', 16, 1), ('王五', 14, 2);-- 從其他表插入數據
INSERT INTO graduate_students
SELECT * FROM students WHERE age > 18;

UPDATE?- 更新數據

-- 更新單列
UPDATE students SET age = 16 WHERE name = '張三';-- 更新多列
UPDATE students 
SET age = age + 1, class_id = 3
WHERE id = 5;-- 使用子查詢更新
UPDATE students
SET class_id = (SELECT id FROM classes WHERE name = '高三')
WHERE age > 17;

DELETE?- 刪除數據

-- 刪除特定記錄
DELETE FROM students WHERE id = 10;-- 刪除所有記錄
DELETE FROM temp_students;-- 使用子查詢刪除
DELETE FROM students
WHERE class_id IN (SELECT id FROM classes WHERE grade = '畢業班');

MERGE?- 合并操作(UPSERT)

-- MySQL語法
INSERT INTO students (id, name, age)
VALUES (1, '張三', 15)
ON DUPLICATE KEY UPDATE age = 16;-- PostgreSQL語法
INSERT INTO students (id, name, age)
VALUES (1, '張三', 15)
ON CONFLICT (id) DO UPDATE SET age = 16;

三、DQL (Data Query Language) 數據查詢語言

功能:查詢數據庫中的數據

主要命令:

  1. SELECT?- 查詢數據

-- 基本查詢
SELECT * FROM students;-- 條件查詢
SELECT name, age FROM students WHERE age > 15;-- 排序
SELECT * FROM students ORDER BY age DESC, name ASC;-- 分組聚合
SELECT class_id, COUNT(*) as student_count, AVG(age) as avg_age
FROM students
GROUP BY class_id
HAVING COUNT(*) > 5;-- 連接查詢
SELECT s.name, c.class_name
FROM students s
JOIN classes c ON s.class_id = c.id;-- 子查詢
SELECT name FROM students
WHERE class_id IN (SELECT id FROM classes WHERE grade = '高一');-- 分頁查詢
SELECT * FROM students LIMIT 10 OFFSET 20;  -- MySQL
SELECT * FROM students OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;  -- SQL標準

WITH (CTE)?- 公用表表達式

WITH top_students AS (SELECT * FROM students ORDER BY score DESC LIMIT 10
)
SELECT * FROM top_students WHERE gender = 'F';

四、DCL (Data Control Language) 數據控制語言

功能:控制數據庫訪問權限和事務處理

主要命令:

  1. GRANT?- 授予權限

-- 授予SELECT權限
GRANT SELECT ON students TO user1;-- 授予所有權限
GRANT ALL PRIVILEGES ON database.* TO 'admin'@'localhost';-- 授予特定列權限
GRANT SELECT (name, age), UPDATE (age) ON students TO teacher_role;

REVOKE?- 撤銷權限

-- 撤銷權限
REVOKE INSERT ON students FROM user2;-- 撤銷所有權限
REVOKE ALL PRIVILEGES ON database.* FROM 'old_admin'@'localhost';

COMMIT?- 提交事務

BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

ROLLBACK?- 回滾事務

BEGIN TRANSACTION;
DELETE FROM orders WHERE status = 'pending';
-- 發現錯誤
ROLLBACK;

SAVEPOINT?- 設置保存點

BEGIN TRANSACTION;
INSERT INTO log (message) VALUES ('Operation started');
SAVEPOINT sp1;
UPDATE data SET value = 10 WHERE id = 1;
-- 部分回滾
ROLLBACK TO SAVEPOINT sp1;
COMMIT;

五、四種語言對比總結

類別全稱主要功能常用命令特點
DDLData Definition Language定義數據結構CREATE, ALTER, DROP, TRUNCATE自動提交,不可回滾
DMLData Manipulation Language操作數據記錄INSERT, UPDATE, DELETE, MERGE需要顯式提交,可回滾
DQLData Query Language查詢數據SELECT, WITH不改變數據,只檢索
DCLData Control Language權限控制GRANT, REVOKE, COMMIT, ROLLBACK管理訪問和事務

六、實際應用示例

場景:學生管理系統操作

-- DDL: 創建表結構
CREATE TABLE classes (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,grade VARCHAR(20)
) ENGINE=InnoDB;-- DML: 插入班級數據
INSERT INTO classes (name, grade) VALUES 
('一班', '高一'), ('二班', '高一'), ('三班', '高二');-- DQL: 查詢班級信息
SELECT * FROM classes WHERE grade = '高一';-- DML: 更新班級信息
UPDATE classes SET grade = '高三' WHERE name = '三班';-- DCL: 創建用戶并授權
CREATE USER 'teacher'@'%' IDENTIFIED BY 'password';
GRANT SELECT, UPDATE ON school.students TO 'teacher'@'%';
GRANT SELECT ON school.classes TO 'teacher'@'%';-- DDL: 添加索引提高查詢性能
CREATE INDEX idx_class_grade ON classes(grade);-- 事務處理示例 (DCL)
BEGIN TRANSACTION;-- DML: 轉班操作UPDATE students SET class_id = 2 WHERE id = 101;UPDATE class_stats SET student_count = student_count - 1 WHERE class_id = 1;UPDATE class_stats SET student_count = student_count + 1 WHERE class_id = 2;
COMMIT;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94443.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ESP-idf框架下的HTTP服務器\HTML 485溫濕度采集并長傳

項目描述:本項目采用485采集溫濕度以及電壓電流等,485模塊分別為下圖,串口轉485模塊采用自動收發模塊,ESP32工作在AP熱點模式,通過手機連接esp32的熱點來和esp進行數據通訊,使用esp32作為HTTP服務器缺陷:項目的最終HTML頁面代碼可發給AI讓其寫注釋#include "freertos/Free…

雅江工程解鎖墨脫秘境:基礎條件全展示(區位、地震、景點、天氣)

目錄 前言 一、區位信息 1、空間位置 2、區位介紹 二、地震信息 1、歷史地震信息 2、5.0級以上大地震 三、景點信息 1、景點列表分布 2、4A級以上景點 四、天氣信息 1、天氣實況 2、天氣應對挑戰 五、總結 前言 相信最近大家對雅江電站的超級大工程項目應該有所耳…

??機器學習貝葉斯算法

??一、引言??在當今機器學習領域,貝葉斯算法猶如一顆璀璨的明星。你是否想過,垃圾郵件過濾系統是如何準確判斷一封郵件是否為垃圾郵件的呢?這背后可能就有貝葉斯算法的功勞。今天,我們就一同走進貝葉斯算法的世界,…

Chisel芯片開發入門系列 -- 18. CPU芯片開發和解釋8(流水線架構的代碼級理解)

以【5 Stage pipeline CPU】搜索圖片,選取5幅有代表性的圖列舉如下,并結合Chisel代碼進行理解和點評。 圖1:原文鏈接如下 https://acsweb.ucsd.edu/~dol031/posts/update/2023/04/10/5stage-cpu-pipeline.html 點評:黑色的部分…

Docker容器中文PDF生成解決方案

在Docker容器中生成包含中文內容的PDF文件時,經常遇到中文字符顯示為方塊或亂碼的問題。本文將詳細介紹如何在Docker環境中配置中文字體支持,實現完美的中文PDF生成。 問題現象 當使用wkhtmltopdf、Puppeteer或其他PDF生成工具時: 中文字符…

2.java集合,線程面試題(已實踐,目前已找到工作)

1線程的創建方式 繼承Thread類實現Runnable接口實現Callable接口 2.這三種方式在項目中的使用有哪些,一般都是怎么用的 繼承thread類實現線程的方式通過實現run方法來實現線程,通過run進行線程的啟用實現runnable方法實現run方法,然后通過thr…

站在前端的角度,看鴻蒙頁面布局

從Web前端轉向鴻蒙(HarmonyOS)開發時,理解其頁面布局的相似與差異是快速上手的核心。鴻蒙的ArkUI框架在布局理念上與Web前端有諸多相通之處,但也存在關鍵區別。以下從五個維度系統分析: 📦 一、盒子模型&a…

JavaWeb遺傳算法、TSP、模擬退火、ACO算法等實戰應用

Java Web中實現遺傳算法的應用 以下是關于Java Web中實現遺傳算法的應用場景和實例的整理,涵蓋不同領域的解決方案和實現方法: 遺傳算法基礎結構 在Java Web中實現遺傳算法通常需要以下核心組件: 種群初始化:隨機生成初始解集。 適應度函數:評估個體優劣。 選擇操作:輪…

【圖像算法 - 09】基于深度學習的煙霧檢測:從算法原理到工程實現,完整實戰指南

一、項目背景與需求 視頻介紹 【圖像算法 - 09】基于深度學習的煙霧檢測:從算法原理到工程實現,完整實戰指南今天我們使用深度學習來訓練一個煙霧明火檢測系統。這次我們使用了大概一萬五千張圖片的數據集訓練了這次的基于深度學習的煙霧明火檢測模型&a…

間接制冷技術概念及特征

1、基本概念 (1)間接制冷技術即二次制冷技術。常規做法:二次冷卻液儲液罐增加放置于制冷系統管路,促使冷量再快捷的傳遞給載冷劑,繼而載冷劑冷量促使冷庫達到制冷效果。間接制冷技術:通過常壓的二次冷卻介質進行大循環傳送冷量,在直接制冷劑不易應用的位置或者不可運用直…

Antlr學習筆記 01、maven配置Antlr4插件案例Demo

文章目錄前言源碼插件描述pom引入插件案例:實現hello 標識符 案例1、引入Antlr4的pom運行依賴2、定義語義語法,配置.g4文件實現java代碼3、編寫完之后,執行命令實現編譯4、編寫單測測試使用參考文章資料獲取前言 博主介紹:?目前…

PostGIS面試題及詳細答案120道之 (101-110 )

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

第十七天:原碼、反碼、補碼與位運算

原碼、反碼、補碼與位運算 一、原碼、反碼、補碼 1、原碼 定義:原碼是一種簡單的機器數表示法。對于一個有符號整數,最高位為符號位, 0 表示正數, 1 表示負數,其余位表示數值的絕對值。示例:以 8 位二進制…

一次完整的 Docker 啟動失敗排錯之旅:從 `start-limit` 到 `network not found

一次完整的 Docker 啟動失敗排錯之旅:從 start-limit 到 network not found 你是否也曾自信地敲下 sudo systemctl start docker,卻只得到一個冰冷的 failed?這是一個開發者和運維工程師都可能遇到的場景。本文將通過一個真實的排錯案例&…

Tdengine 時序庫年月日小時分組匯總問題

年月分組select to_char(collection_time ,"yyyy-mm") AS date, cast(SUM(a.stage_value)as DOUBLE) as stage_value from TABLE GROUP BY date年月日分組select to_char(collection_time ,"yyyy-mm-dd") AS date, SUM(a.stage_value)as DOUBLE) as stage_…

數據結構(01)—— 數據結構的基本概念

408前置學習C語言基礎也可以看如下專欄:打怪升級之路——C語言之路_ankleless的博客-CSDN博客 目錄 1. 基本概念 1.1 數據 1.2 數據元素 1.3 數據項 1.4 組合項 1.5 數據對象 1.6 數據類型 2. 數據結構 2.1 邏輯結構 2.2 存儲結構 2.3 數據的運算 在學…

什么是模型并行?

模型并行c 簡單來說,就是把一個模型拆開來放到多個 GPU 上,一起訓練,從而化解“顯存塞不下模型”的問題!更多專業課程內容可以聽取工信部電子標準院《人工智能大模型應用工程師》課程獲得詳解!

跑yolov5的train.py時,ImportError: Failed to initialize: Bad git executable.

遇到的問題&#xff1a; Traceback (most recent call last):File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 296, in <module>refresh()File "D:\miniconda\envs\yolov5\lib\site-packages\git\__init__.py", line 287…

TCP如何實現可靠傳輸?實現細節?

TCP如何實現可靠傳輸&#xff1f;實現細節&#xff1f;如何實現可靠傳輸&#xff1f;擁塞控制的主要機制TCP流量控制怎么實現的&#xff1f;如何實現可靠傳輸&#xff1f; TCP通過自身的序列號、確認應答、數據效驗、超時重傳、流量控制、擁塞避免&#xff0c;確保了數據傳輸的…

Linux 服務器性能監控、分析與優化全指南

Linux 服務器性能監控、分析與優化在現代 IT 架構中&#xff0c;Linux 服務器作為承載業務系統的核心載體&#xff0c;其性能表現直接決定了服務的穩定性、響應速度與用戶體驗。無論是高并發的 Web 服務、數據密集型的數據庫集群&#xff0c;還是承載虛擬化平臺的宿主機&#x…