閱讀631 返回首頁    go 阿裏雲 go 技術社區[雲棲]


DBA必讀的數據庫查詢語言使用內幕

本文將提供一個查詢語言類型的概述。

 

這篇博客的靈感來源於一些客戶問我的問題,當在一個特定的領域工作時,你經常會碰到一些對你們這行來說非常有意義的專用詞匯,它通常包括了高效的短語和縮寫。

 

數據庫也一樣,數據庫語言對於DBA而言可能很有意義,但對於沒有接觸過它的人來說聽起來倒有點像“巫術”。以下這篇文章涵蓋了SQL裏麵查詢語言的基本類型,我希望它能夠闡明SQL的含義,使你能夠更好地理解和使用SQL。

 

DDL(數據定義語言)  

 

數據庫模式是一係列可視化的信息。它由表、視圖和任何包含數據的結構組成,同時定義了如何存儲和可視化信息。

 

數據庫模式就像一個架構,它定義了如何去組織數據。任何對這個架構進行的創建、更新或者更改操作就是DDL。

 

還記得電子表格嗎?一張表的定義描述了以下類似信息:

 

20170329095834382.jpg

 

當你想要創建一張類似的表時,你必須要使用DDL,例如:

 

20170329095845274.jpg

 

Create、Alter、Drop等這些類型的結構修改查詢就是DDL。定義表的結構非常重要,因為它定義了存儲在數據庫中信息的訪問和可視化方式。

 

但我為什麼要在意這麼多?

 

DDL定義了你開發程序的結構,同時也定義了數據庫服務器搜索表信息的方式,以及它是如何關聯到其他表(例如,使用外鍵)。

 

不像MongoDB這種NoSQL解決方案,你必須在添加信息前設計好你的MySQL模式。MySQL設計模式可能更加嚴格,但如果你想正確的存儲和查詢信息,這將是非常有意義的。

 

在大多數場景下,由於RDBMS係統的嚴格性,改變數據結構(或者表模式)需要係統重建實際表。這對於數據庫性能或者表的可用性(鎖定)來說可能存在問題。通常這是一個“熱”過程(從MySQL5.6開始),操作時不需要停機。

 

除此之外,pt-osc工具等其他開源解決方案也可用於不停機改變數據結構。例如:

 

20170329095853414.jpg

 

DML(數據操作語言)  

 

數據操作聽起來有點像處理內部的結構信息,數據操作通常有插入和刪除信息(添加行,刪除行)例如:

 

20170329095944123.jpg

 

恩,但我為什麼要使用它呢?

 

除非你往數據庫中插入和提取信息,否則擁有一個數據庫環境對你來說毫無意義。記住,數據庫是無處不在的,當你在最喜歡的博客網站上點擊一個鏈接時,這很可能意味著你正在從一個數據庫中獲取信息(數據被插入或者修改了一次)。所以,與數據庫交互時,你需要編寫DML語句。

 

DCL (數據控製語言)  

 

數據控製語言是任何用於管理訪問數據庫內容的操作,例如GRANT:

 

20170329095957225.jpg

 

很好,但為什麼會在SQL裏會有另一種語言的子集?

 

作為數據庫環境的用戶,有時候你需要通過別人去執行DCL查詢才能得到訪問權限。

 

在MySQL中,數據控製語言是用來定義訪問如表、視圖、變量等數據結構的授權規則。

 

TCL (事務控製語言)  

 

事務控製語言在數據庫中用來控製事務的處理。那事務處理究竟是什麼意思呢?

 

事務處理通常和DML查詢綁在一起,例如:

 

20170329100007578.jpg

 

這使你能夠執行或者回滾一個完整的動作。但隻有像InnoDB這種提供事務支持的的存儲引擎才能使用TCL。

 

為什麼又多了一個術語?

 

你是否曾經想過把幾種信息結合起來並把它當做一條事務來執行?在某些情況下,事務能夠確保你首先執行插入,然後執行的更新是有意義的。

 

如果不使用事務,插入可能會失敗,關聯的更新也可能變成無效的條目。

 

事務能夠確保一個完整的事務(一組DML查詢)要麼生效,要麼完全回滾(這也稱為原子性)。

 

希望本文能幫助你了解一些數據庫的內幕。

 原文發布時間為:2017-03-29

本文來自雲棲社區合作夥伴DBAplus

最後更新:2017-05-16 11:32:04

  上一篇:go  前端知識圖譜,你值得收藏
  下一篇:go  你要為難優化器,優化器會加倍為難你