- SQL Server 2016從入門到精通(視頻教學超值版)
- 王英英
- 5555字
- 2019-12-06 15:49:21
3.3 管理數(shù)據(jù)表
數(shù)據(jù)表創(chuàng)建完成之后,可以根據(jù)需要改變表中已經(jīng)定義的許多選項。用戶除了可以對字段進行增加、刪除和修改操作,以及更改表的名稱和所屬架構外,還可以刪除和修改表中的約束,創(chuàng)建或修改完成之后可以查看表結(jié)構。表不需要時可以刪除。本節(jié)將介紹這些管理數(shù)據(jù)表的操作。
3.3.1 修改表字段
修改表字段包含增加一個新字段、刪除表中原有的一個字段以及修改字段的數(shù)據(jù)類型。SQL Server 2016提供了兩種修改表字段的方法,分別是使用對象資源管理器和使用T-SQL語句修改數(shù)據(jù)表。
1.增加字段
增加字段的常見方法有以下兩種。
(1)使用對象資源管理器增加字段
例如,在authors數(shù)據(jù)表中,增加一個新的字段,名稱為auth_phone,數(shù)據(jù)類型為varchar(24),允許空值,在authors表上右擊,在彈出的快捷菜單中選擇【設計】菜單命令,如圖3-14所示。

圖3-14 選擇【設計】菜單命令
與前面介紹的創(chuàng)建數(shù)據(jù)表的過程相同,在彈出的表設計窗口中,添加新字段auth_phone,并設置字段數(shù)據(jù)類型為varchar(24),允許空值,如圖3-15所示。

圖3-15 增加字段auth_phone
修改完成之后,保存結(jié)果,增加新字段成功。
提示
如果在保存的過程中,無法保存增加的表字段,則彈出警告對話框,如圖3-16所示。

圖3-16 警告對話框
解決方案的具體操作步驟如下。
選擇【工具】|【選項】菜單命令,如圖3-17所示。

圖3-17 選擇【選項】菜單命令
打開【選項】對話框,選擇【設計器】選項,在右側(cè)面板中取消【阻止保存要求重新創(chuàng)建表的更改】復選框,單擊【確定】按鈕即可,如圖3-18所示。

圖3-18 【選項】對話框
(2)使用T-SQL語句添加字段
在T-SQL中使用ALTER TABLE語句在數(shù)據(jù)表中增加字段,基本語法格式如下:

其中,各參數(shù)含義如下。
- table_name:新增加字段的數(shù)據(jù)表名稱。
- column_name:新增加的字段的名稱。
- type_name:新增加字段的數(shù)據(jù)類型。
其他參數(shù)的含義,用戶可以參考前面的內(nèi)容。
【例3.3】在authors表中添加名稱為auth_note的新字段,字段數(shù)據(jù)類型為varchar(100),允許空值,輸入語句如下。

新建一個當前連接查詢,在查詢編輯器中輸入上面的代碼并執(zhí)行,執(zhí)行之后,用戶可以重新打開authors的表設計窗口,可以看到,現(xiàn)在的表結(jié)構如圖3-19所示。

圖3-19 添加字段auth_note
從圖3-19可以看到,成功添加了一個新的字段,數(shù)據(jù)類型為varchar(100),【允許Null值】選項也處于選中狀態(tài)。
2.修改字段
修改字段的常見方法有以下兩種。
(1)使用對象資源管理器修改字段
修改字段可以改變字段的屬性,例如字段的數(shù)據(jù)類型、是否允許空值等。修改數(shù)據(jù)類型時,在數(shù)據(jù)表設計窗口中,選擇要修改的字段名稱,選擇該行的【數(shù)據(jù)類型】,在下拉列表框中選擇更改后的數(shù)據(jù)類型;選中或取消【允許Null值】列的選項卡即可。例如,將auth_phone字段的數(shù)據(jù)類型由varchar(24),修改為varchar(50),不允許空值,如圖3-20所示。

圖3-20 修改字段
(2)使用T-SQL語句在數(shù)據(jù)表中修改字段
在T-SQL中使用ALTER TABLE語句在數(shù)據(jù)表中修改字段,基本語法格式如下:

其中,各參數(shù)的含義如下。
- table_name:要修改字段的數(shù)據(jù)表名稱。
- column_name:要修改的字段的名稱。
- new_type_name:要修改的字段的新數(shù)據(jù)類型。
其他參數(shù)的含義,用戶可以參考前面的內(nèi)容。
【例3.4】在authors表中修改名稱為auth_phone的字段,將數(shù)據(jù)類型改為varchar(15),輸入語句如下。

新建一個當前連接查詢,在查詢編輯器中輸入上面的代碼并執(zhí)行,執(zhí)行之后,用戶可以重新打開authors的表設計窗口,可以看到,現(xiàn)在的表結(jié)構如圖3-21所示。

圖3-21 authors表結(jié)構
3.刪除字段
刪除字段的常用方法有以下兩種。
(1)使用對象資源管理器刪除字段
在表的設計窗口中,每次可以刪除表中的一個字段,操作過程比較簡單,與前面增加表字段相似,打開表設計窗口之后,選中要刪除的字段,右擊,在彈出的快捷菜單中選擇【刪除列】菜單命令。例如,這里刪除authors表中的auth_phone字段,如圖3-22所示。
刪除字段操作成功后,效果如圖3-23所示。

圖3-22 【刪除列】菜單命令

圖3-23 刪除字段后的效果
(2)使用T-SQL語句刪除數(shù)據(jù)表中的字段
在T-SQL中使用ALTER TABLE語句刪除數(shù)據(jù)表中的字段,基本語法格式如下:

其中,各參數(shù)的含義如下。
- table_name:刪除字段所在數(shù)據(jù)表的名稱。
- column_name:要刪除的字段的名稱。
【例3.5】刪除authors表中的auth_phone字段,輸入語句如下。

在查詢編輯器中輸入上面的代碼并執(zhí)行,執(zhí)行成功之后,auth_phone字段將被刪除。
3.3.2 修改表約束
約束是用來保證數(shù)據(jù)庫完整性的一種方法,設計表時,需要定義列的有效值并通過限制字段中數(shù)據(jù)、記錄中數(shù)據(jù)和表之間的數(shù)據(jù)來保證數(shù)據(jù)的完整性,約束是獨立于表結(jié)構的,它作為數(shù)據(jù)庫定義的一部分在創(chuàng)建表時聲明,可以通過對象資源管理器或者ALTER TABLE語句添加或刪除。
SQL Server 2016中有5種約束,分別是:主鍵約束(primary key constraint)、唯一性約束(unique constraint)、檢查約束(check constraint)、默認約束(default constraint)和外鍵約束(foreign key constraint)。
1.主鍵約束
主鍵約束可以在表中定義一個主鍵值,它可以唯一確定表中每一條記錄,也是最重要的一種約束。每個表中只能有一個PRIMARY KEY約束,并且PRIMARY KEY約束的列不能接受空值。如果主鍵約束定義在不止一列上,則一列中的值可以重復,但主鍵約束定義中,所有列的組合值必須唯一。
2.唯一性約束
唯一性約束(UNIQUE)確保在非主鍵列中不輸入重復的值,用于指定一個或者多個列的組合值具有唯一性,以防止在列中輸入重復的值。可以對一個表定義多個UNIQUE約束,但只能定義一個PRIMARY KEY約束。UNIQUE約束允許NULL值,但是當和參與UNIQUE約束的任何值一起使用時,每列只允許一個空值。
因此,當表中已經(jīng)有一個主鍵值時,就可以使用唯一性約束。當使用唯一性約束時,需要考慮以下幾個因素:
(1)使用唯一性約束的字段允許為空值。
(2)一個表中可以允許有多個唯一性約束。
(3)可以把唯一性約束定義在多個字段上。
(4)唯一性約束用于強制在指定字段上創(chuàng)建一個唯一性索引。
(5)默認情況下,創(chuàng)建的索引類型為非聚集索引。
3.檢查約束
檢查約束對輸入列或者整個表中的值設置檢查條件,以限制輸入值,保證數(shù)據(jù)庫數(shù)據(jù)的完整性。檢查約束通過數(shù)據(jù)的邏輯表達式確定有效值。例如,定義一個age年齡字段,可以通過創(chuàng)建CHECK約束條件,將age列中值的范圍限制為從0到150之間的數(shù)據(jù)。這將防止輸入的年齡值超出正常的年齡范圍。可以通過任何基于邏輯運算符返回TRUE或FALSE的邏輯(布爾)表達式創(chuàng)建CHECK約束。對于上面的示例,邏輯表達式為:age >= 0 AND age <= 150。
當使用檢查約束時,應考慮和注意以下幾點:
(1)一個列級檢查約束只能與限制的字段有關;一個表級檢查約束只能與限制的表中字段有關。
(2)一個表中可以定義多個檢查約束。
(3)每個CREATE TABLE語句中的每個字段只能定義一個檢查約束。
(4)在多個字段上定義檢查約束,則必須將檢查約束定義為表級約束。
(5)當執(zhí)行INSERT語句或者UPDATE語句時,檢查約束將驗證數(shù)據(jù)。
(6)檢查約束中不能包含子查詢。
4.默認約束
默認約束指定在插入操作中如果沒有提供輸入值時,系統(tǒng)自動指定插入值,即使該值是NULL。當必須向表中加載一行數(shù)據(jù)但不知道某一列的值,或該值尚不存在,此時可以使用默認值約束。默認約束可以包括常量、函數(shù)、不帶變元的內(nèi)建函數(shù)或者空值。使用默認約束時,應注意以下幾點:
(1)每個字段只能定義一個默認約束。
(2)如果定義的默認值長于其對應字段的允許長度,則輸入到表中的默認值將被截斷。
(3)不能加入到帶有IDENTITY屬性或者數(shù)據(jù)類型為timestamp的字段上。
(4)如果字段定義為用戶定義的數(shù)據(jù)類型,而且有一個默認綁定到這個數(shù)據(jù)類型上,則不允許該字段有默認約束。
5.外鍵約束
外鍵約束用于強制參照完整性,提供單個字段或者多個字段的參照完整性。定義時,該約束參考同一個表或者另外一個表中主鍵約束字段或者唯一性約束字段,而且外鍵表中的字段數(shù)目和每個字段指定的數(shù)據(jù)類型都必須和REFERENCES表中的字段相匹配。當使用外鍵約束時,應考慮以下幾個因素:
(1)外鍵約束提供了字段參照完整性。
(2)外鍵從句中的字段數(shù)目和每個字段指定的數(shù)據(jù)類型都必須和REFERENCES從句中的字段相匹配。
(3)外鍵約束不能自動創(chuàng)建索引,需要用戶手動創(chuàng)建。
(4)用戶想要修改外鍵約束的數(shù)據(jù),必須只使用REFERENCES從句,不能使用外鍵子句。
(5)一個表中最多可以有31個外鍵約束。
(6)在臨時表中,不能使用外鍵約束。
(7)主鍵和外鍵的數(shù)據(jù)類型必須嚴格匹配。
講解了5種約束之后,下文將對增加和刪除約束分別進行介紹。
1.增加約束
增加約束有兩種方法,可以分別使用對象資源管理器和T-SQL語句來創(chuàng)建。這里以member表為例,介紹增加PRIMARY KEY和UNIQUE約束的過程。
(1)使用對象資源管理器
使用對象資源管理器創(chuàng)建PRIMARY KEY約束,對test數(shù)據(jù)庫中的member表中的id字段建立PRIMARY KEY,具體操作步驟如下。
在【對象資源管理器】窗口中選擇member表節(jié)點右擊,在彈出的快捷菜單中選擇【設計】菜單命令,打開表設計窗口。在表設計窗口中選擇【id】字段對應的行,右擊并在彈出的快捷菜單中選擇【設置主鍵】菜單命令,如圖3-24所示。

圖3-24 選擇【設置主鍵】菜單命令
設置完成之后,id所在行會有一個鑰匙圖標,表示這是主鍵列,如圖3-25所示。
如果主鍵由多列組成,可以選中某一列的同時,按Ctrl鍵選擇多行,然后右擊并在彈出的快捷菜單中選擇【主鍵】菜單命令,即可將多列設為主鍵,如圖3-26所示。

圖3-25 設置【主鍵】列

圖3-26 設置多列為主鍵
使用對象資源管理器創(chuàng)建UNIQUE約束,具體操作步驟如下。
在【對象資源管理器】窗口中選擇member表節(jié)點,右擊并在彈出快捷菜單中選擇【設計】菜單命令,打開表設計窗口。右擊唯一性約束的行FirstName,在彈出的快捷菜單中選擇【索引/鍵】菜單命令,如圖3-27所示。
打開【索引/鍵】對話框,在該窗口中顯示了剛才通過表設計窗口添加了一個名稱為PK_member_1的主鍵約束,如圖3-28所示。

圖3-27 選擇【索引/鍵】菜單命令

圖3-28 【索引/鍵】對話框1
單擊【添加】按鈕,添加一個新的唯一性約束,然后單擊【列】右側(cè)的按鈕
,如圖3-29所示。
打開【索引列】對話框,在【列名】中列出了member表中所有的字段,選擇添加唯一性約束的字段FirstName,排序順序使用升序,然后單擊【確定】按鈕,如圖3-30所示。

圖3-29 添加約束

圖3-30 【索引列】對話框
返回到【索引/鍵】對話框,即可看到修改后的索引,在【名稱】文本框中輸入新的名稱為firstname1,設置完成之后,單擊【關閉】按鈕,如圖3-31所示。

圖3-31 【索引/鍵】對話框2
(2)使用T-SQL語句添加PRIMARY KEY約束和UNIQUE約束
T-SQL語句中可以在創(chuàng)建表的同時添加約束,其基本語法格式如下:

constraint_name為用戶定義的要創(chuàng)建的約束的名稱。
【例3.6】定義表table_emp,并將表中e_id字段設為主鍵列,輸入語句如下。

執(zhí)行完成之后,刷新test數(shù)據(jù)庫中的表,可以看到新建立的名稱為table_emp的數(shù)據(jù)表,查看該表的設計窗口,如圖3-32所示。

圖3-32 創(chuàng)建帶主鍵約束的表table_emp
從圖3-32中可以看到,T-SQL語句成功地在e_id字段建立了一個主鍵約束,用戶可以選擇工具欄上的【管理索引和鍵】命令,在【索引和鍵】窗口中可以看到表中的兩個索引鍵,分別為以PK_開頭的表示主鍵約束和以UQ_開頭的表示唯一性約束的兩個鍵,以及這兩個鍵所在的表字段信息。
2.刪除約束
當不再需要使用約束的時候,可以將其刪除,刪除約束的方法有兩種,分別是使用對象資源管理器刪除和在修改表時使用T-SQL語句刪除。
(1)使用對象資源管理器刪除PRIMARY KEY和UNIQUE約束
在對象資源管理器中刪除主鍵約束或者唯一性約束,步驟如下。
打開table_emp數(shù)據(jù)表的表結(jié)構設計窗口。
單擊工具欄上的【管理索引和鍵】按鈕或者右擊,選擇【索引/鍵】菜單命令,打開【索引/鍵】窗口。
選擇要刪除的索引或鍵,單擊【刪除】按鈕。用戶在這里可以選擇刪除table_emp表中的主鍵索引或者是唯一性索引約束。
刪除完成之后,單擊【關閉】按鈕,刪除約束操作成功。
(2)使用ALTER TABLE語句刪除PRIMARY KEY和UNIQUE約束
ALTER TABLE語句用來對數(shù)據(jù)表進行操作,可以在修改數(shù)據(jù)表的時候刪除表中的約束,其刪除約束的基本語法格式如下:

- table_name:約束所在的數(shù)據(jù)表名稱。
- constraint_name:需要刪除的約束名稱,n在這里表示可以同時刪除多個不同名稱的約束。
【例3.7】刪除member表中的主鍵約束和唯一性約束,T-SQL語句如下。

PK_member和UQ_firstname分別為member表中兩種約束的名稱,用戶可以在【索引/鍵】窗口中查看表中的所有索引和鍵的名稱。
3.3.3 查看表中有關信息
數(shù)據(jù)表創(chuàng)建之后,可能不同的用戶需要查看表的有關信息,比如表的結(jié)構、表的屬性、表中存儲的數(shù)據(jù)以及與其他數(shù)據(jù)對象之間的依賴關系等。
1.查看表的結(jié)構
打開數(shù)據(jù)庫test,在需要查看的表上右擊,在彈出的快捷菜單中選擇【設計】菜單命令,打開表設計窗口,在使用對象資源管理器創(chuàng)建數(shù)據(jù)表時,用戶已經(jīng)在前面的內(nèi)容中看到過這個窗口,該窗口中顯示了表定義中各個字段的名稱、數(shù)據(jù)類型、是否允許空值以及主鍵唯一性約束等信息。另外,用戶可以進行修改該頁中的屬性操作,最后單擊【保存】按鈕即可保存修改的操作,如圖3-33所示。

圖3-33 表設計窗口
2.查看表的相關信息
在需要查看的表member上右擊,并在彈出的快捷菜單中選擇【屬性】菜單命令,打開【表屬性】窗口,在【常規(guī)】選項卡中顯示了該表所在的數(shù)據(jù)庫名稱、當前連接到服務器的用戶名稱、表的創(chuàng)建時間和架構等屬性,這里顯示的屬性不能修改,如圖3-34所示。

圖3-34 【表屬性】窗口
3.查看表中存儲的數(shù)據(jù)
在member表上右擊,在彈出的快捷菜單中選擇【編輯前200行】菜單命令,將顯示member表中的前200條記錄,并允許用戶編輯這些數(shù)據(jù)。如果記錄少于200行,則有多少行就顯示多少行,如圖3-35所示。

圖3-35 【編輯前200行】命令顯示結(jié)果
4.查看表與其他數(shù)據(jù)對象的依賴關系
在要查看的表上右擊,在彈出的快捷菜單中選擇【查看依賴關系】菜單命令,打開【對象依賴關系】窗口,該窗口顯示了該表和其他數(shù)據(jù)對象的依賴關系。如果某個存儲過程中使用了該表,該表的主鍵是被其他表的外鍵約束所依賴或者該表依賴其他數(shù)據(jù)對象時,這里會列出相關的信息,如圖3-36所示。

圖3-36 【對象依賴關系】窗口
3.3.4 刪除表
當數(shù)據(jù)表不再使用時,可以將其刪除。刪除數(shù)據(jù)表有兩種方法,分別是使用對象資源管理器和使用DROP TABLE語句刪除。
1.使用對象資源管理器刪除數(shù)據(jù)表
在對象資源管理器中,展開指定的數(shù)據(jù)庫和表,右擊需要刪除的表,從彈出的快捷菜單中選擇【刪除】菜單命令,在彈出的【刪除對象】窗口中單擊【確定】按鈕,即可刪除表,如圖3-37所示。

圖3-37 【刪除對象】窗口
提示
當有對象依賴于該表時,該表不能被刪除。單擊【顯示依賴關系】按鈕,可以查看依賴于該表和該表依賴的對象。
2.使用DROP TABLE語句刪除數(shù)據(jù)表
T-SQL語言中可以使用DROP TABLE語句刪除指定的數(shù)據(jù)表,基本語法格式如下:

table_name是等待刪除的表名稱。
【例3.8】刪除test數(shù)據(jù)庫中的authors表,輸入語句如下。

- DB2 V9權威指南
- JavaScript全程指南
- SpringMVC+MyBatis快速開發(fā)與項目實戰(zhàn)
- Cross-platform Desktop Application Development:Electron,Node,NW.js,and React
- INSTANT FreeMarker Starter
- C# Programming Cookbook
- Raspberry Pi for Secret Agents(Third Edition)
- Learn WebAssembly
- 零基礎學MQL:基于EA的自動化交易編程
- PostgreSQL Replication(Second Edition)
- C#程序設計
- Android底層接口與驅(qū)動開發(fā)技術詳解
- 機器學習微積分一本通(Python版)
- Go語言入門經(jīng)典
- 3ds Max 2018從入門到精通