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;
CREATE VIEW public_employee AS
SELECT id, name FROM employee
在上面的示例中,我們的表 (VIEW) public_employee 將僅包含員工 ID 和他們的姓名,但不包含有關他們薪水的信息。您可以在與真實表格相同的地方使用此類視圖。
為什麼需要視圖?它們具有許多優點:
靈活控制對信息的訪問。您可以只授予某些用戶訪問 VIEW 的權限,而不授予對錶的訪問權限。在視圖中,只從表中取出公共信息。此外,如果以後在表中添加了具有重要信息的新列,也不會意外進入View。
數據反規範化。為了方便存儲,數據往往被分成成百上千個表,但是對於普通人來說處理這樣的數據並不是很方便——你必須編寫太複雜的查詢。使用 View,您可以創建虛擬表,在單個表中顯示來自數十個不同表的數據。
多態和封裝。您可以更改數據庫的結構。同時,使用您的視圖的程序用戶不會猜到某些東西已經改變。並且無需重寫有權訪問 View 的程序代碼。您只需要調整與 VIEW 相關的 SQL 腳本。
只讀。View 只能通過 SELECT 查詢設置,因此使用 View 不能以任何方式更改真實表中的數據。順便說一句,這是支持查詢緩存的另一個優點。但下次會更多。
GO TO FULL VERSION