SQL 就是我們的一切

正如您可能已經猜到的那樣,所有發給 SQL 服務器的命令都可以通過 SQL 查詢給出。一切。

這些團隊被正式分為 4 組:

  • 數據定義語句(Data Definition Language,DDL):

    • CREATE創建數據庫對象(數據庫本身、表、視圖、用戶等)
    • ALTER改變一個對象
    • DROP刪除一個對象
  • 數據操縱運算符(Data Manipulation Language,DML):

    • SELECT選擇滿足給定條件的數據
    • INSERT添加新數據
    • UPDATE更改現有數據
    • DELETE刪除數據
  • 數據訪問定義運算符(數據控制語言,DCL):

    • GRANT授予用戶(組)對對象執行某些操作的權限
    • REVOKE撤銷先前頒發的權限
    • DENY設置優先於許可的禁令
  • 事務控制語言 ( TCL )語句:

    • COMMIT應用事務
    • ROLLBACK回滾當前事務上下文中所做的所有更改
    • SAVEPOINT將交易分成更小的部分

而前兩個層次,我們只研究了 SELECT 語句的變種。想像一下未來有多少有趣的事情等待著我們。

但是我們這裡主要是針對Java程序員準備的,所以我們會研究那些你在工作中肯定會遇到的場景。

項目的系統管理員很可能會創建所有的數據庫,但您肯定必須自己多次從數據中進行選擇。

而且,有時你的代碼不會把所有的數據都寫入數據庫,或者寫錯了,所以你常常不得不拿著筆爬進去,看看那裡到底存了些什麼。

讓我們再次回顧一下我們在之前的講座中提到的內容。

在數據庫中創建模式

要在 DBMS 中創建新模式,您需要運行以下命令:

CREATE SCHEMA Name;

這是最簡單的選擇。此外,在創建新架構時,您可以指定數據編碼格式和其他參數。

如果你想刪除模式,但你不確定它是否存在,那麼你需要運行命令:

DROP SCHEMA IF EXIST Name;

您會經常在具有不同數據庫備份的文件中看到這些命令,這就是我將它們帶到這裡的原因。

選擇當前方案

如果您的 DBMS 中有很多模式,那麼很容易發生不同模式具有相同表的情況。為避免混淆,您可以做兩件事:

  • 始終將架構名稱放在表名稱之前
  • 指定默認模式

讓我們編寫一個查詢,從用戶表中選擇數據,該表位於測試模式中。它看起來像這樣:

SELECT * FROM test.user;

如果您需要在一個查詢中連接 (JOIN) 來自不同模式的多個表,這是必不可少的。

順便說一下,在 Java 語言中我們經常做類似的事情:如果在代碼中我們需要使用來自不同包的同名類,我們在類名之前添加包名。

第二種方式是指定默認模式。如果查詢指定表名但沒有模式,則使用默認模式。為此,請使用USE 語句

USE name - schemes;

讓我們使用 USE 語句重寫之前的查詢:

USE test;
SELECT * FROM user;

創建視圖

除了包含真實數據的表之外,SQL 還允許您存儲虛擬表之類的東西,其中數據是從真實表中提取的。這樣的虛擬表稱為VIEW。

這樣的表不能存儲真實的數據,每次訪問都是從真實的表中拉取數據。這種 VIEW 的內容是使用 SQL 查詢指定的。

您可以使用以下命令從任何 SELECT 查詢創建一個 VIEW:

CREATE VIEW Name AS
SELECT-request;
讓我們編寫一個查詢,該查詢將基於員工表創建一個 public_employee 虛擬表,其中將隱藏員工薪水信息:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

在上面的示例中,我們的表 (VIEW) public_employee 將僅包含員工 ID 和他們的姓名,但不包含有關他們薪水的信息。您可以在與真實表格相同的地方使用此類視圖。

為什麼需要視圖?它們具有許多優點:

靈活控制對信息的訪問。您可以只授予某些用戶訪問 VIEW 的權限,而不授予對錶的訪問權限。在視圖中,只從表中取出公共信息。此外,如果以後在表中添加了具有重要信息的新列,也不會意外進入View。

數據反規範化。為了方便存儲,數據往往被分成成百上千個表,但是對於普通人來說處理這樣的數據並不是很方便——你必須編寫太複雜的查詢。使用 View,您可以創建虛擬表,在單個表中顯示來自數十個不同表的數據。

多態和封裝。您可以更改數據庫的結構。同時,使用您的視圖的程序用戶不會猜到某些東西已經改變。並且無需重寫有權訪問 View 的程序代碼。您只需要調整與 VIEW 相關的 SQL 腳本。

只讀。View 只能通過 SELECT 查詢設置,因此使用 View 不能以任何方式更改真實表中的數據。順便說一句,這是支持查詢緩存的另一個優點。但下次會更多。