這篇文章主要介紹了DDL、DML和DCL的區別與理解,須要的朋友能夠參考下數據庫
DML、DDL、DCL區別 .安全
整體解釋:併發
DML(data manipulation language):ide
它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字同樣,這4條命令是用來對數據庫裏的數據進行操做的語言優化
DDL(data definition language):spa
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定義或改變表(TABLE)的結構,數據類型,表之間的連接和約束等初始化工做上,他們大多在創建表時使用rest
DCL(Data Control Language):日誌
是數據庫控制功能。是用來設置或更改數據庫用戶或角色權限的語句,包括(grant,deny,revoke等)語句。在默認狀態下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人員纔有權力執行DCL對象
詳細解釋:blog
1、DDL is Data Definition Language statements. Some examples:數據定義語言,用於定義和管理 SQL 數據庫中的全部對象的語言
1.CREATE - to create objects in the database 建立
2.ALTER - alters the structure of the database 修改
3.DROP - delete objects from the database 刪除
4.TRUNCATE - remove all records from a table, including all spaces allocated for the records are removed
TRUNCATE TABLE [Table Name]。
下面是對Truncate語句在MSSQLServer2000中用法和原理的說明:
Truncate table 表名 速度快,並且效率高,由於:
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:兩者均刪除表中的所有行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。
DELETE 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE 經過釋放存儲表數據所用的數據頁來刪除數據,而且只在事務日誌中記錄頁的釋放。
TRUNCATE TABLE 刪除表中的全部行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置爲該列的種子。若是想保留標識計數值,請改用 DELETE。若是要刪除表定義及其數據,請使用 DROP TABLE 語句。
對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。因爲 TRUNCATE TABLE 不記錄在日誌中,因此它不能激活觸發器。
TRUNCATE TABLE 不能用於參與了索引視圖的表。
5.COMMENT - add comments to the data dictionary 註釋
6.GRANT - gives user's access privileges to database 受權
7.REVOKE - withdraw access privileges given with the GRANT command 收回已經授予的權限
2、DML is Data Manipulation Language statements. Some examples:數據操做語言,SQL中處理數據等操做統稱爲數據操縱語言
1.SELECT - retrieve data from the a database 查詢
2.INSERT - insert data into a table 添加
3.UPDATE - updates existing data within a table 更新
4.DELETE - deletes all records from a table, the space for the records remain 刪除
5.CALL - call a PL/SQL or Java subprogram
6.EXPLAIN PLAN - explain access path to data
Oracle RDBMS執行每一條SQL語句,都必須通過Oracle優化器的評估。因此,瞭解優化器是如何選擇(搜索)路徑以及索引是如何被使用的,對優化SQL語句有很大的幫助。Explain能夠用來迅速方便地查出對於給定SQL語句中的查詢數據是如何獲得的即搜索路徑(咱們一般稱爲Access Path)。從而使咱們選擇最優的查詢方式達到最大的優化效果。
7.LOCK TABLE - control concurrency 鎖,用於控制併發
3、DCL is Data Control Language statements. Some examples:數據控制語言,用來授予或回收訪問數據庫的某種特權,並控制數據庫操縱事務發生的時間及效果,對數據庫實行監視等
1.COMMIT - save work done 提交
2.SAVEPOINT - identify a point in a transaction to which you can later roll back 保存點
3.ROLLBACK - restore database to original since the last COMMIT 回滾
4.SET TRANSACTION - Change transaction options like what rollback segment to use 設置當前事務的特性,它對後面的事務沒有影響.
DDL、DML和DCL的理解 (張青山)
先給出一個圖:
一、DDL
1-一、DDL的概述
DDL(Data Definition Language 數據定義語言)用於操做對象和對象的屬性,這種對象包括數據庫自己,以及數據庫對象,像:表、視圖等等,DDL對這些對象和屬性的管理和定義具體表如今Create、Drop和Alter上。特別注意:DDL操做的「對象」的概念,」對象「包括對象及對象的屬性,並且對象最小也比記錄大個層次。以表舉例:Create建立數據表,Alter能夠更改該表的字段,Drop能夠刪除這個表,從這裏咱們能夠看到,DDL所站的高度,他不會對具體的數據進行操做。
1-二、DDL的主要語句(操做)
Create語句:能夠建立數據庫和數據庫的一些對象。
Drop語句:能夠刪除數據表、索引、觸發程序、條件約束以及數據表的權限等。
Alter語句:修改數據表定義及屬性。
1-三、DDL的操做對象(表)
1-3-一、表的概念
表的建立就是用來存放數據用的,因爲咱們存放的數據的不通,因此咱們須要定義些數據類型,以方便管理。
1-3-二、表的屬性
主鍵屬性:主鍵就是主鍵約束,只不過起的名字不一樣了,主鍵的起名偏向於虛的(就是描述描述這件事),主鍵約束起名偏向於實得(就是描述操做的實施),描述的都是同一件事,主鍵約束就是表中的一個屬性;在一個表中最多能夠有一個主鍵;一個主鍵能夠定義在一個或多個字段;主鍵使一個或多個字段的值必須惟一且不爲空,這樣作能夠經過該字段或該組字段中的值惟一的表明一條記錄。
惟一屬性:一個表中只能有一個主鍵屬性,爲了方表用戶,提出惟一約束;惟一約束能夠定義在一個或多個字段上;惟一約束使該字段或該組字段中的值惟一,能夠爲空,可是,不能重複。
外鍵屬性:又叫外鍵,又叫外鍵約束,跟主鍵和主鍵約束的關係是同樣的;外鍵約束針對的兩個表,若是表A的主關鍵字是表B中的字段,則該字段稱爲表B的外鍵,表A稱爲主表,表B稱爲從表,但要注意,必需要計算機要知道你是這種關係。
覈查、Null和缺省屬性:覈查屬性又叫覈查約束,Null屬性又叫Null約束,缺省屬性又叫缺省約束;這些名稱是描述一件事,描述一種狀況,這件事或這張狀況咱們固然能夠人爲的那樣特地作(輸入數據是注意就行),可是,他們的本意是實現自動化,也就是讓計算機作這件事。
(你知道爲何創建主鍵和惟一約束的時候,會自動的建立索引嗎?並且是惟一索引,想想索引大多在那些字段上用,以及索引的做用就會知道了。像主鍵約束、惟一約束、非空約束、外鍵約束、覈查約束和缺省約束這些操做都是使表具備某些特性,因此在這裏我認爲他們都是表的屬性。)
二、DML
2-一、DML的概述
DML(Data Manipulation Language 數據操控語言)用於操做數據庫對象中包含的數據,也就是說操做的單位是記錄。
2-二、DML的主要語句(操做)
Insert語句:向數據表張插入一條記錄。
Delete語句:刪除數據表中的一條或多條記錄,也能夠刪除數據表中的全部記錄,可是,它的操做對象還是記錄。
Update語句:用於修改已存在表中的記錄的內容。
2-三、DML的操做對象——記錄
2-3-一、注意
當咱們對記錄進行Insert、Delete和Update操做的時候,必定要注意,必定要清楚DDL對其的一些操做。
三、DCL
3-一、DCL的概述
DCL(Data Control Language 數據控制語句)的操做是數據庫對象的權限,這些操做的肯定使數據更加的安全。
3-二、DCL的主要語句(操做)
Grant語句:容許對象的建立者給某用戶或某組或全部用戶(PUBLIC)某些特定的權限。
Revoke語句:能夠廢除某用戶或某組或全部用戶訪問權限
3-三、DCL的操做對象(用戶)
此時的用戶指的是數據庫用戶。