數據庫中DDL、DML、DCL的區別是什么?

數據庫中DDL、DML、DCL的區別是什么?

在數據庫的使用過程中,SQL(結構化查詢語言)常常被用來執行不同的操作,主要分為三類:DDL(數據定義語言)、DML(數據操縱語言)、DCL(數據控制語言)。這三類語言的作用各不相同,在數據庫的管理和操作中有著各自獨特的職責。本文將深入分析這三類語言的區別與應用。
在這里插入圖片描述

一、DDL(數據定義語言)

1. 定義和作用

DDL(Data Definition Language)是用來定義和管理數據庫中的數據結構和對象的語言。它主要涉及數據庫的創建、修改和刪除等操作。通過DDL,數據庫管理員(DBA)可以定義表格、索引、視圖、存儲過程等對象的結構。

2. 常見的DDL語句
  • CREATE:用于創建數據庫對象,如數據庫、表、視圖、索引等。
    • 示例:CREATE TABLE users (id INT, name VARCHAR(50));
  • ALTER:用于修改現有數據庫對象的結構。
    • 示例:ALTER TABLE users ADD COLUMN email VARCHAR(100);
  • DROP:用于刪除數據庫對象,如表、視圖、數據庫等。
    • 示例:DROP TABLE users;
  • TRUNCATE:用于刪除表中的所有數據,但不刪除表本身。與DELETE不同,TRUNCATE是不可恢復的。
    • 示例:TRUNCATE TABLE users;
  • COMMENT:用于為數據庫對象添加注釋。
    • 示例:COMMENT ON COLUMN users.name IS 'User name';
  • REVOKE/GRANT:雖然常用于DCL(數據控制語言),但在某些數據庫系統中,它也被歸類為DDL操作,用于授予或撤銷權限。
    • 示例:GRANT SELECT ON users TO 'user_role';
3. DDL的特征
  • DDL語句通常會直接影響數據庫結構,因此執行這些語句時會有“隱式提交”的效果,一旦執行完成,所有的更改都立即生效。
  • DDL操作通常不可回滾(除非使用事務控制的數據庫支持回滾)。執行之后的數據和結構會永久改變,除非通過其他手段(如備份恢復)恢復。

二、DML(數據操縱語言)

1. 定義和作用

DML(Data Manipulation Language)用于處理數據庫中的數據。DML語句的核心作用是對數據表中的記錄進行增、刪、改、查等操作。DML操作允許用戶與數據交互、插入新數據、更新現有數據以及刪除數據等。

2. 常見的DML語句
  • SELECT:用于從數據庫中查詢數據。
    • 示例:SELECT * FROM users;
  • INSERT:用于向數據庫表中插入數據。
    • 示例:INSERT INTO users (id, name, email) VALUES (1, 'John Doe', 'john.doe@example.com');
  • UPDATE:用于更新表中現有的記錄。
    • 示例:UPDATE users SET email = 'john_new@example.com' WHERE id = 1;
  • DELETE:用于刪除表中的記錄。
    • 示例:DELETE FROM users WHERE id = 1;
  • CALL:用于調用存儲過程。
    • 示例:CALL update_user_email(1, 'john_updated@example.com');
  • EXPLAIN PLAN:用于查看查詢的執行計劃。
    • 示例:EXPLAIN PLAN FOR SELECT * FROM users;
  • LOCK TABLE:用于鎖定表,以便其他用戶無法修改該表的數據。
    • 示例:LOCK TABLE users IN EXCLUSIVE MODE;
3. DML的特征
  • DML語句通常在事務中執行,并且支持回滾(ROLLBACK),如果操作發生錯誤,可以撤銷對數據的修改。
  • 與DDL不同,DML操作是針對數據內容的修改,而非數據庫結構的修改。

三、DCL(數據控制語言)

1. 定義和作用

DCL(Data Control Language)用于控制數據庫的訪問權限和事務控制。DCL語句主要涉及到數據庫用戶的權限管理及數據安全方面的操作。它確保了只有具有特定權限的用戶才能對數據庫進行操作。

2. 常見的DCL語句
  • GRANT:用于授予用戶或角色特定的權限。
    • 示例:GRANT SELECT, INSERT ON users TO 'user_role';
  • REVOKE:用于撤銷已授予用戶或角色的權限。
    • 示例:REVOKE SELECT ON users FROM 'user_role';
  • COMMIT:用于提交事務,使所有修改永久生效。
    • 示例:COMMIT;
  • ROLLBACK:用于回滾事務,撤銷當前事務中的所有操作。
    • 示例:ROLLBACK;
  • SAVEPOINT:用于設置事務中的保存點,便于回滾到某個特定的點。
    • 示例:SAVEPOINT savepoint_name;
  • SET TRANSACTION:用于設置事務的隔離級別。
    • 示例:SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
3. DCL的特征
  • DCL操作主要用于授權和控制數據庫的訪問權限,確保數據的安全性與完整性。
  • DCL操作通常是由數據庫管理員(DBA)執行的,用于管理用戶權限和數據庫的事務控制。
  • 與DML不同,DCL并不直接涉及到數據的操作,而是控制誰可以操作數據以及如何操作數據。

四、DDL、DML、DCL的主要區別

類別作用常見命令操作對象可回滾性事務控制
DDL用于定義數據庫結構CREATE, ALTER, DROP, TRUNCATE, COMMENT數據庫、表、視圖、索引等不可回滾
DML用于操作數據SELECT, INSERT, UPDATE, DELETE表中的數據可回滾支持
DCL用于控制權限和事務GRANT, REVOKE, COMMIT, ROLLBACK, SAVEPOINT用戶權限、事務不適用支持

五、總結

  • DDL主要用于定義和管理數據庫結構,執行DDL語句會對數據庫對象的結構產生永久性的影響。
  • DML則處理數據庫中的數據內容,執行DML語句時,用戶可以增、刪、改、查數據,且這些操作可以通過事務回滾。
  • DCL用于控制用戶和權限的管理,確保數據的安全性與訪問控制,同時還涉及事務的提交和回滾等操作。

了解DDL、DML、DCL的區別對于數據庫管理員和開發者非常重要,因為它們是數據庫操作中不可或缺的一部分,每種語言的操作性質和使用場景都不同,合理使用可以幫助更高效、更安全地管理和操作數據庫。


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

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

相關文章

海量聊天消息處理:ShardingJDBC分庫分表、ClickHouse冷熱數據分離、ES復合查詢方案、Flink實時計算與SpringCloud集成

海量聊天消息處理:ShardingJDBC分庫分表、ClickHouse冷熱數據分離、ES復合查詢方案、Flink實時計算與SpringCloud集成 一、背景介紹 每天有2000萬條聊天消息,一年下來幾千萬億海量數據。為應對這種規模的數據存儲和處理需求,本文將從以下幾…

Vim 中替換字符或文本

在 Vim 中替換字符或文本可以使用 替換命令(substitute),其基本語法為: :[range]s/old/new/[flags]1. 基本替換 命令說明:s/foo/bar/替換當前行的第一個 foo 為 bar:s/foo/bar/g替換當前行的 所有 foo 為 bar:%s/foo/bar/g替換 …

當傳統美術館遇上數字革命:觀眾體驗將迎來哪些顛覆性變革?

當數字科技與藝術創作深度交織,美術館與藝術機構正經歷前所未有的顛覆性浪潮。這是否宣告傳統展覽空間已正式跨入數字媒介主導的新紀元?投影映射與虛擬現實技術不斷突破物理限制,畫布與雕塑的邊界在光影與代碼中逐漸消融。這場革命不僅重構了…

內容/社區APP增長:用Deeplink讓用戶分享的內容“一鍵直達”

對于內容平臺和互動社區APP而言,優質內容的自發傳播是用戶增長和活躍度提升的核心驅動力之一。用戶發現一篇深度好文、一個精彩視頻或是一個引人入勝的討論帖,自然而然地想要分享給好友。然而,這個看似簡單的分享動作,卻往往在觸達…

Uniapp:vite.config.js全局配置

目錄 一、基本概述二、配置自動引入插件一、基本概述 vite.config.js 是一個可選的配置文件,如果項目的根目錄中存在這個文件,那么它會被自動加載,一般用于配置 vite 的編譯選項 二、配置自動引入插件 在項目命令行終端中執行如下代碼 npm install unplugin-auto-import…

JavaScript 與 Java 學習筆記

一、JavaScript 簡介 1. 定義 瀏覽器腳本語言:主要用于實現網頁交互功能(鼠標點擊、鍵盤輸入響應等) 服務器端擴展:通過 Node.js 運行時環境可進行后端開發 2. 核心特點 動態性:可實時修改 DOM 結構(增…

Shell腳本-隨機數實戰案例

在Shell腳本編程中,生成隨機數是一項非常實用的技能。無論是用于模擬、測試、游戲開發還是安全相關的應用(如生成密碼),能夠靈活地生成隨機數都是非常有用的。本文將通過幾個實際的應用案例來展示如何在Shell腳本中使用隨機數解決…

面試算法高頻08-動態規劃-03

練習題 題目描述 你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。 給定一個代表每…

基于 EFISH-SBC-RK3588 的無人機多光譜/紅外熱成像邊緣計算方案

一、硬件架構設計? ?核心算力平臺(EFISH-SBC-RK3588)? ?處理器性能?:搭載 8 核 ARM 架構(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 與 Mali-G610 GPU,支持多光譜圖像實時融…

Python小酷庫系列:pyNest,把FastAPI程序寫出Spring的味道

pyNest,把FastAPI程序寫出Spring的風格 快速入門1、安裝pyNest2、創建項目3、編寫app_module.py4、編寫app_service.py5、編寫app_controller.py6、編寫main.py7、啟動程序 核心概念1、Modules2、Controllers3、Providers4、ORM Provider NestJS是風靡于Node.js圈的…

HTML 詳解:從基礎結構到語義標簽

目錄 一、HTML 是什么&#xff1f;二、HTML 的基本結構? 簡要說明&#xff1a; 三、常見 HTML 標簽講解3.1 標題標簽 <h1> ~ <h6>3.2 段落和換行3.3 超鏈接3.4 圖像插入3.5 列表無序列表&#xff1a;有序列表&#xff1a; 3.6 表格結構 四、HTML 語義化標簽詳解五…

用Python做有趣的AI項目 6:AI音樂生成器(LSTM Melody Generator)

&#x1f3b5; 項目名稱&#xff1a;AI音樂生成器&#xff08;LSTM Melody Generator&#xff09; &#x1f9e0; 項目簡介 這個項目的目標是&#xff1a;用 AI 來自動生成簡單的旋律&#xff08;MIDI格式&#xff09;&#xff0c;類似于基礎的鋼琴曲、背景音樂片段。 我們使…

【運維】利用任務計劃程序定時重啟 nssm 服務 | Windows 服務每日定時維護實踐

&#x1f680; 利用任務計劃程序定時重啟 nssm 服務 | Windows 服務每日定時維護實踐 一、前言 在 Windows 系統中&#xff0c;nssm&#xff08;Non-Sucking Service Manager&#xff09; 是一個非常好用的工具&#xff0c;可以將任意可執行程序注冊為系統服務。很多運維場景…

MATLAB小試牛刀系列(1)

問題描述 某機床廠生產甲、乙兩種機床&#xff0c;每臺機床銷售后的利潤分別為 4 千元與 3 千元。生產甲機床需用 A、B 機器加工&#xff0c;加工時間分別為每臺 2h 和每臺 1h&#xff1b;生產乙機床需用 A、B、C 三種機器加工&#xff0c;加工時間均為每臺 1h。若每天可用于加…

云原生周刊:Kubernetes v1.33 正式發布

開源項目推薦 Robusta Robusta 是一個開源的 K8s 可觀測性與自動化平臺&#xff0c;旨在增強 Prometheus 告警的智能化處理能力。它通過規則和 AI 技術對告警進行豐富化處理&#xff0c;自動附加相關的 Pod 日志、圖表和可能的修復建議&#xff0c;支持智能分組、自動修復和高…

React速通筆記

相關視頻&#xff1a; 黑馬程序員前端React18入門到實戰視頻教程&#xff0c;從reacthooks核心基礎到企業級項目開發實戰&#xff08;B站評論、極客園項目等&#xff09;及大廠面試全通關_嗶哩嗶哩_bilibili 一、React介紹 React由Meta公司開發&#xff0c;是一個用于 構建W…

人工智能與機器學習:Python從零實現K-Means 算法

&#x1f9e0; 向所有學習者致敬&#xff01; “學習不是裝滿一桶水&#xff0c;而是點燃一把火。” —— 葉芝 我的博客主頁&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 歡迎點擊加入AI人工智能社區&#xff01; &#x1f680; 讓我們一起努力&#xff0c;共創…

【神經網絡與深度學習】訓練集與驗證集的功能解析與差異探究

引言 在深度學習模型的訓練過程中&#xff0c;訓練集和驗證集是兩個關鍵組成部分&#xff0c;它們在模型性能的提升和評估中扮演著不可替代的角色。通過分析這兩者的區別和作用&#xff0c;可以幫助我們深入理解模型的學習過程和泛化能力&#xff0c;同時為防止過擬合及優化超…

Macos m系列芯片環境下python3安裝mysqlclient系列問題

最近學習python3&#xff0c;在安裝mysqlclient的時候遇到了一些問題&#xff0c;直接使用哦pip install mysqlclient 直接報錯了&#xff0c;記錄一下解決方案。 環境信息 設備&#xff1a;Macbook Pro m1 系統&#xff1a;macos Sequoia 15.3.2 最終成功的python版本&#xf…

微信小程序-van-uploader的preview-size

preview-size支持數組格式 修改前修改后1、升級微信小程序里面的van版本:2、 重新構建npm3、重啟微信開發工具 修改前 引用van組件的上傳文件&#xff0c;設置預覽圖尺寸&#xff0c;剛開始設置的是preview-size“140”&#xff0c;出來的效果就是一個正方形。 修改后 1、升級…