創(chuàng)建數(shù)據(jù)庫表數(shù)據(jù)庫原理.ppt
數(shù)據(jù)庫原理與應(yīng)用 第10章 數(shù)據(jù)庫表,學(xué)習(xí)目的,掌握利用企業(yè)管理器(Enterprise Manager)創(chuàng)建表; 掌握利用Transact-SQL語句中的create命令創(chuàng)建表,重點&難點,重點 利用Transact-SQL語句中的create命令創(chuàng)建表 難點 無,第10章 數(shù)據(jù)庫表,數(shù)據(jù)庫最重要的功能之一是存儲數(shù)據(jù)。 關(guān)系型數(shù)據(jù)庫中,數(shù)據(jù)保存在表中。 數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計后,得到了一系列的關(guān)系模式,進入數(shù)據(jù)庫實施階段,將把關(guān)系模式轉(zhuǎn)換為DBMS的數(shù)據(jù)庫表。 數(shù)據(jù)庫表是數(shù)據(jù)的最基本構(gòu)成元素,對數(shù)據(jù)庫的操作大多基于數(shù)據(jù)庫表。,第10章 數(shù)據(jù)庫表,10.1創(chuàng)建數(shù)據(jù)庫表 10.2 修改數(shù)據(jù)庫表 10.3 使用約束 10.4 建立索引 10.5 刪除數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表,創(chuàng)建表 創(chuàng)建表:就是將邏輯設(shè)計階段得到的關(guān)系模式用DBMS所支持的形式表達出來。 每一個關(guān)系模式就是一張數(shù)據(jù)(庫)表。 可看作定義這張表的“表頭”如何命名每一列及每一列的屬性特點是什么。 在SQL Server 2000中,每個數(shù)據(jù)庫中最多可以創(chuàng)建200萬個表,用戶創(chuàng)建數(shù)據(jù)庫表時,最多可以定義1024列,也就是可以定義1024個字段。,10.1 創(chuàng)建數(shù)據(jù)庫表,SQL Server 2000提供了兩種方法創(chuàng)建數(shù)據(jù)庫表 利用企業(yè)管理器(Enterprise Manager)創(chuàng)建表 利用Transact-SQL語句中的create命令創(chuàng)建表,10.1 創(chuàng)建數(shù)據(jù)庫表,利用企業(yè)管理器(Enterprise Manager)創(chuàng)建表 步驟如下: (1)在樹形目錄中找到要建表的數(shù)據(jù)庫,展開該數(shù)據(jù)庫。 (2)選擇表,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“新建表”命令,表設(shè)計器如圖所示。,10.1 創(chuàng)建數(shù)據(jù)庫表,利用企業(yè)管理器(Enterprise Manager)創(chuàng)建表 步驟如下: (1)在樹形目錄中找到要建表的數(shù)據(jù)庫,展開該數(shù)據(jù)庫。 (2)選擇表,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“新建表”命令,表設(shè)計器如圖所示。 (3)表設(shè)計器的上半部分有一個表格,在這個表格中輸入列的屬性,表格的每一行對應(yīng)一列。對每一列都需要進行以下設(shè)置,其中前三項是必須在建表時給出的,它們是: 列名:即字段名。 數(shù)據(jù)類型:數(shù)據(jù)類型是一個下拉列表框,其中包括了所有的系統(tǒng)數(shù)據(jù)類型 長度:如果選擇的數(shù)據(jù)類型需要長度,則指定長度。 允許空:單擊鼠標(biāo),可以切換是否允許為空值的狀態(tài),勾選說明允許為空值,空白說明不允許為空值,默認(rèn)狀態(tài)下是允許為空值的。,10.1 創(chuàng)建數(shù)據(jù)庫表,利用企業(yè)管理器(Enterprise Manager)創(chuàng)建表 步驟如下: (3)表設(shè)計器的上半部分有一個表格,在這個表格中輸入列的屬性,表格的每一行對應(yīng)一列。對每一列都需要進行以下設(shè)置,其中前三項必須在建表時給出,它們是: 列名:即字段名。 數(shù)據(jù)類型:數(shù)據(jù)類型是一個下拉列表框,其中包括了所有的系統(tǒng)數(shù)據(jù)類型 長度:如果選擇的數(shù)據(jù)類型需要長度,則指定長度。 允許空:單擊鼠標(biāo),可以切換是否允許為空值的狀態(tài),勾選說明允許為空值,空白說明不允許為空值,默認(rèn)狀態(tài)下是允許為空值的。,10.1 創(chuàng)建數(shù)據(jù)庫表,利用企業(yè)管理器(Enterprise Manager)創(chuàng)建表 步驟如下: (3)表設(shè)計器的上半部分有一個表格,在這個表格中輸入列的屬性,表格的每一行對應(yīng)一列。 表設(shè)計器的下半部分是特定列的詳細屬性,包括是否是標(biāo)識列、是否使用默認(rèn)值等。 (4)定義好所有列后,單擊工具欄上的保存按扭,表就創(chuàng)建完成了。,10.1 創(chuàng)建數(shù)據(jù)庫表,利用Transact-SQL語句中的create命令創(chuàng)建表 其語法形式如下: CREATE TABLE 表名 (列名1 數(shù)據(jù)類型 identity|not null|null, 列名2 數(shù)據(jù)類型 identity|not null|null, ) 注意:在創(chuàng)建表之前,要先使用use命令打開需要創(chuàng)建表的數(shù)據(jù)庫,10.1 創(chuàng)建數(shù)據(jù)庫表,三個參數(shù)的含義: null:表示該列的值可以為空值,即沒有存儲任何數(shù)據(jù),此為默認(rèn)參數(shù)(不能將空值理解為該列的值是0或空字符串等值) not null:表示該列的值不能為空。 identify:計數(shù)器,表示該列的值是一組遞增的整數(shù)數(shù)據(jù)。初始值默認(rèn)為1,增長步長默認(rèn)為1。也可自己指定初始值和增長步長。(課本 表10-1),10.1 創(chuàng)建數(shù)據(jù)庫表,例:在Company數(shù)據(jù)庫中創(chuàng)建一個雇員信息表 該表記錄了雇員的號碼、姓名、性別、出生日期、雇傭日期、職工種類、工資信息。 其中:職工號碼:整型,不能為空 姓名:可變長度字符型,允許為空 出生日期:日期型,允許為空 雇傭日期:日期型,不能為空 職工種類:可變長度字符型,允許為空 工資:貨幣型,允許為空,10.1 創(chuàng)建數(shù)據(jù)庫表,其SQL語句的程序清單如下: use Company go CREATE TABLE employee ( number int not null, name varchar(10) NULL, birthday datetime null, hire_date datetime NOT NULL, professional_title varchar(10) null, salary money null),10.1 創(chuàng)建數(shù)據(jù)庫表,表名 在同一數(shù)據(jù)庫內(nèi),數(shù)據(jù)庫表的名稱是惟一的 可以使用中文,也可以使用西文符號 最多64個字符(一個漢字占兩個字符) 建立臨時表 臨時表的表名必須以#打頭 仍然使用CREATE TABLE命令 例:Create table #demotable (user_id numeric(10,0) identity, Name varchar(30) not NULL),10.1 創(chuàng)建數(shù)據(jù)庫表,例10-1 確定期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表的表名,10.1 創(chuàng)建數(shù)據(jù)庫表,列名 表中的每一列也稱為字段,所以列名也叫字段名 字段名的命名方式基本同數(shù)據(jù)表名的命名 字段名在數(shù)據(jù)表中要求是惟一的,但在整個數(shù)據(jù)庫中可以重名,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 定義數(shù)據(jù)表中的每一個字段必須聲明其數(shù)據(jù)類型,DBMS才能實現(xiàn)對數(shù)據(jù)的存儲管理。 為每一個字段選擇合適的數(shù)據(jù)類型和數(shù)據(jù)長度將直接影響著數(shù)據(jù)庫系統(tǒng)存儲空間的利用和系統(tǒng)的性能。 在建立數(shù)據(jù)庫表時,要慎重決定每個字段的數(shù)據(jù)類型。,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 T-SQL中支持的、常用的數(shù)據(jù)類型 字符型 日期時間類型 數(shù)值類型 二進制型 位型 文本型 圖像型 時間戳型,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (1)字符型 字符型變量應(yīng)定義長度 允許定義的最大長度是255 有兩種 固定長度的char( )類型 可變長度的varchar( )類型 輸入字符型數(shù)據(jù)時必須用單引號將數(shù)據(jù)括起來,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (2)日期時間型 datetime和smalldatetime是用來存儲日期和時間數(shù)據(jù),10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (3)整數(shù)類型 多用于處理數(shù)值類型數(shù)據(jù),10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (4)浮點數(shù)類型 多用于處理取值范圍很大的數(shù)字量 ,使用時有一定的精確度,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (5)精確數(shù)類型 精確數(shù)類型有兩種形式 Decimal Numeric 與浮點類型數(shù)據(jù)的區(qū)別 可自定義精度的位數(shù) 例 num_col(5,2) 可以表示的最大值是999.99,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (6)貨幣型 ¥、,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (7)位數(shù)據(jù)類型 位數(shù)據(jù)類型bit是一種邏輯數(shù)據(jù)類型 只有1和0兩種數(shù)值 一般常用作true/false使用 定義bit列時,不允許為NULL,也不能建立索引 多個bit列可占用一個字節(jié),10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (8)文本型和圖像型 文本類型text 圖像類型image 每行可以存儲2GB的二進制大型對象,10.1 創(chuàng)建數(shù)據(jù)庫表,數(shù)據(jù)類型 (9)時間戳型 時間戳型表示Timestamp 由系統(tǒng)自動賦值的一個計數(shù)器數(shù)據(jù) 記錄了數(shù)據(jù)行的操作順序 時間戳列的數(shù)據(jù)保持惟一,它可以惟一標(biāo)識表中的列 時間戳列的值實際來自于事務(wù)日志,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-2 確定期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表中字段的字段名和數(shù)據(jù)類型,數(shù)據(jù)表Mag_dept,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-2 確定期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表中字段的字段名和數(shù)據(jù)類型,數(shù)據(jù)表mag_emp,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-2 確定期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表中字段的字段名和數(shù)據(jù)類型,數(shù)據(jù)表Mag_info,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-2 確定期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表中字段的字段名和數(shù)據(jù)類型,數(shù)據(jù)表mag_doc,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-3 建立期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表,創(chuàng)建mag_dept表,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-3 建立期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表,創(chuàng)建mag_emp表,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-3 建立期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表,創(chuàng)建mag_info表,10.1 創(chuàng)建數(shù)據(jù)庫表,例10-3 建立期刊采編系統(tǒng)數(shù)據(jù)庫中各數(shù)據(jù)表,創(chuàng)建mag_doc表,10.1 創(chuàng)建數(shù)據(jù)庫表,用T-SQL語句查看表定義 1.使用系統(tǒng)存儲過程sp_help可以查看表的定義,在查詢分 析器中輸入 sp_help employee命令,可以查看剛剛創(chuàng)建 的employee表的結(jié)構(gòu)。,補充:,10.1 創(chuàng)建數(shù)據(jù)庫表,2.使用系統(tǒng)存儲過程sp_helpdb 格式如下: sp_helpdb 數(shù)據(jù)庫名 1)不給出參數(shù),將顯示服務(wù)器中所有數(shù)據(jù)庫的信息,如圖所示。,補充:,10.1 創(chuàng)建數(shù)據(jù)庫表,使用系統(tǒng)存儲過程sp_helpdb,10.1 創(chuàng)建數(shù)據(jù)庫表,使用系統(tǒng)存儲過程sp_helpdb )給出某個數(shù)據(jù)庫名時,只顯示這個數(shù)據(jù)庫的信息如圖:,10.1 創(chuàng)建數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表,3.使用系統(tǒng)存儲過程sp_databases 格式如下: sp_databases 顯示服務(wù)器中所有可以使用的數(shù)據(jù)庫的信息,如圖所示。 注意:sp_helpdb也是顯示服務(wù)器中所有數(shù)據(jù)庫的信息,兩者之間的差別在哪?,補充:,10.1 創(chuàng)建數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表,4.使用系統(tǒng)存儲過程sp_helpfile 格式如下: sp_helpfile 文件名 查看數(shù)據(jù)庫中文件的信息。 注意:要先使用use命令打開所要查看的數(shù)據(jù)庫,補充:,10.1 創(chuàng)建數(shù)據(jù)庫表,4.使用系統(tǒng)存儲過程sp_helpfile (1)不加文件名,顯示數(shù)據(jù)庫中所有文件的信息,如圖所示。,補充:,10.1 創(chuàng)建數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表,4.使用系統(tǒng)存儲過程sp_helpfile (2)加文件名,顯示數(shù)據(jù)庫中某一文件的信息,補充:,10.1 創(chuàng)建數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表,5.使用系統(tǒng)存儲過程sp_helpfilegroup 格式如下: sp_helpfilegroup 文件組名 不加文件組名,顯示數(shù)據(jù)庫中所有文件組的信息。用法同sp_helpfile。,補充:,第10章 數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表 10.2 修改數(shù)據(jù)庫表 10.3 使用約束 10.4 建立索引 10.5 刪除數(shù)據(jù)庫表,10.2 修改數(shù)據(jù)庫表,添加或刪除列 修改列的屬性 更改列名和表名,10.2 修改數(shù)據(jù)庫表,利用企業(yè)管理器增加、刪除和修改字段 。 在企業(yè)管理器中,打開指定的服務(wù)器中要修改表的數(shù)據(jù)庫,用右鍵單擊要進行修改的表,從彈出的快捷菜單中選擇設(shè)計表選項,則會出現(xiàn)設(shè)計表對話框,在該對話框中,可以利用圖形化工具完成增加、刪除和修改字段的操作。 利用Transact-SQL語言中的alter table命令增加、刪除和修改字段。,10.2 修改數(shù)據(jù)庫表,增加列 語句格式: ALTER TABLE表名 ADD列名 列的描述 例如:向Company數(shù)據(jù)庫的employee表中添加性別(sex)列。 use Company go alter table employee add sex char(4) null,10.2 修改數(shù)據(jù)庫表,增加列 例10-4 向數(shù)據(jù)表mag_emp中添加一新屬性ID(身份證號碼),數(shù)據(jù)類型為字符型,固定長度18,10.2 修改數(shù)據(jù)庫表,刪除列 語句格式: ALTER TABLE 表名 DROP COLUMN 列名 例如:刪除 employee表的sex列。 use Company go alter table employee drop column sex,10.2 修改數(shù)據(jù)庫表,刪除列 例10-5 刪除數(shù)據(jù)表mag_emp中屬性ID,10.2 修改數(shù)據(jù)庫表,修改列定義 表中的每一列都有其定義,包括列名、數(shù)據(jù)類型、數(shù)據(jù)長度以及是否允許為空值等,這些值都可以在表創(chuàng)建好以后修改。 修改列定義的語句格式為: ALTER TABLE 表名 ALTER COLUMN 列名 數(shù)據(jù)類型列的描述,10.2 修改數(shù)據(jù)庫表,修改列定義 例如:將employee表的name列改為最大長度為20的varchar型數(shù)據(jù),且不允許空值。 use Company go alter table employee alter column name varchar(20) not null 默認(rèn)狀態(tài)下,列是被設(shè)置為允許空值的,將一個原來允許空值的列改為不允許空值,必須在以下兩個條件滿足時才能成功: (1)列中沒有存放是空值的記錄 (2)在列上沒有創(chuàng)建索引。,10.2 修改數(shù)據(jù)庫表,修改列定義 例10-6 將數(shù)據(jù)表mag_info中PubDate的數(shù)據(jù)類型更改為smalldatetime,10.2 修改數(shù)據(jù)庫表,更改列名和表名 更改列名 sp_rename 表名.列名,新列名 更改表名 sp_rename 原表名,新表名,10.2 修改數(shù)據(jù)庫表,更改列名和表名 例10-7 數(shù)據(jù)庫usedb1中建有數(shù)據(jù)表test,包含number、stu_name和class三個字段,請將class更名為class_no,10.2 修改數(shù)據(jù)庫表,更改列名和表名 例10-8 將數(shù)據(jù)庫usedb1中數(shù)據(jù)表test更名為student,第10章 數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表 10.2 修改數(shù)據(jù)庫表 10.3 使用約束 10.4 建立索引 10.5 刪除數(shù)據(jù)庫表,10.3 使用約束,約束的作用 實現(xiàn)數(shù)據(jù)的完整性 實體完整性 參照完整性 用戶自定義完整性,10.3 使用約束,約束的類型,10.3 使用約束,建立約束 定義約束時使用Create table語句 或使用Alter table語句 即可以在定義數(shù)據(jù)表的數(shù)據(jù)列時直接定義約束,也可以對已定義的數(shù)據(jù)表添加約束,10.3 使用約束,建立約束 使用Create table語句格式: Create table 表名 (列名1 數(shù)據(jù)類型 identity |NOT NULL| NULL Constraint 約束名 約束定義, 列名2 數(shù)據(jù)類型 identity |NOT NULL| NULL Constraint 約束名 約束定義, Constraint 約束名 約束定義 ) 建立約束時看隨數(shù)據(jù)定義或者單獨定義,10.3 使用約束,建立約束 使用Alter table語句格式: Alter table 表名 Add Constraint 約束名 約束定義 約束名是一個可選項,如果用戶自己不定義約束名,則系統(tǒng)將按照一定規(guī)則命名該約束。 不命名約束名時,關(guān)鍵字constraint也要省略。,10.3 使用約束,1.primary key 主鍵的添加、刪除和修改操作方法有兩種: (1)企業(yè)管理器操作法,在企業(yè)管理器中,用右鍵單擊要操作的數(shù)據(jù)庫表,從彈出的快捷菜單中選擇設(shè)計表選項 ,然后根據(jù)提示操作。 如圖,10.3 使用約束,10.3 使用約束,1.primary key 主鍵的添加、刪除和修改操作方法有兩種: (2)Transact-SQL語句操作法 其語法形式如下: CONSTRAINT constraint_name PRIMARY KEY(列名1,列名2,) 當(dāng)主鍵由多個列構(gòu)成時,則將列名依次寫在括號中,10.3 使用約束,1.primary key 主鍵的添加、刪除和修改操作方法有兩種: (2)Transact-SQL語句操作法 例10-9 向數(shù)據(jù)表map_dept中添加主鍵約束,10.3 使用約束,注意:此例沒有定義約束名,則系統(tǒng)會按照一定規(guī)則命名該約束。查看約束名方法:如圖,10.3 使用約束,1.primary key 使用create table建立主鍵約束時兩種寫法 (1)定義列名和數(shù)據(jù)類型后,直接寫上關(guān)鍵字primary key (2)定義完所有列名和數(shù)據(jù)類型后,單獨寫明primary key(列名1,列名2 當(dāng)主鍵有兩個或兩個以上屬性共同構(gòu)成時,必須用第二種方法,即單獨定義,而不能隨列的定義而定義。,10.3 使用約束,(1)定義列名和數(shù)據(jù)類型后,直接寫上關(guān)鍵字primary key 例10-10 在數(shù)據(jù)庫usedb2中建立數(shù)據(jù)表map_dept,同時定義主鍵約束,10.3 使用約束,(2)定義完所有列名和數(shù)據(jù)類型后,單獨寫明primary key(列名1,列名2 例10-11 在數(shù)據(jù)庫usedb1中建立數(shù)據(jù)表grade,表中包括學(xué)號sno(char)、課程號cno(char)、成績gmark(numeric)屬性 .主鍵由學(xué)號和課程號構(gòu)成,10.3 使用約束,2.unique 唯一性約束用于指定一個或者多個列的組合的值具有唯一性,以防止在列中輸入重復(fù)的值。當(dāng)使用唯一性約束時,需要考慮以下幾個因素: 主鍵自動具有unique的特性 一個表中可以允許有多個唯一性約束。 可以把唯一性約束定義在多個字段上。 唯一性約束用于強制在指定字段上創(chuàng)建一個唯一性 索引。,10.3 使用約束,2.unique (1)企業(yè)管理器操作法,10.3 使用約束,2.unique (2)Transact-SQL語句操作法 CONSTRAINT 約束名 UNIQUE(列名1,n) 基本用法同主鍵約束,10.3 使用約束,2.unique 例10-12 向數(shù)據(jù)庫usedb2中數(shù)據(jù)表mag_dept屬性DepManager增加UNIQUE約束,10.3 使用約束,3.foreign key 外部鍵約束用于強制參照完整性,提供單個字段或者多個字段的參照完整性。 基本格式為: constraint 約束名 foreign key(列名1,列名2) references 表名(列名1,列名2 ),10.3 使用約束,3.foreign key 注意: (1) 使用create table命令建表時,若隨著列的定義一同定義外鍵,則可以省略關(guān)鍵字foreign key及列名,但使用alter table命令增加外部鍵時不行. (2) 定義外部鍵時要保證被定義為外鍵的屬性在參照表中已經(jīng)被定義為主鍵.,10.3 使用約束,3.foreign key 例10-13 向數(shù)據(jù)庫MagDb中數(shù)據(jù)表mag_emp的屬性DepId添加外鍵約束,10.3 使用約束,3.foreign key 例10-14 在數(shù)據(jù)庫usedb2中建立數(shù)據(jù)表mag_emp,同時定義主鍵和外鍵,10.3 使用約束,4.check 一個列級檢查約束只能與限制的字段有關(guān);一個表級檢查約束只能與限制的表中字段有關(guān)。 一個表中可以定義多個檢查約束。 每個CREATE TABLE語句中每個字段只能定義一個檢查約束。 在多個字段上定義檢查約束,則必須將檢查約束定義為表級約束。 當(dāng)執(zhí)行INSERT語句或者UPDATE語句時,檢查約束將驗證數(shù)據(jù)。,10.3 使用約束,4.check (1)企業(yè)管理器操作法,10.3 使用約束,4.check (2)Transact-SQL語句操作法。其語法形式如下: CONSTRAINT 約束名 CHECK(邏輯表達式),10.3 使用約束,4.check 例10-15 將數(shù)據(jù)庫MagDb中數(shù)據(jù)表mag_emp的屬性EmpAge取值范圍限定在1-100之間(含1和100),并將此約束命名為ck_age,10.3 使用約束,4.check 例子:創(chuàng)建一個學(xué)生信息表,其中輸入性別字段值時,只能接受“F”或者“M”,并且為phonenum字段創(chuàng)建檢查約束,限制只能輸入類似80798654之類的數(shù)據(jù),而不能隨意輸入其他數(shù)據(jù)。,create table student ( id char(8), name char(8), sex char(2), phonenum int, constraint chk_sex check (sex in (F,M), constraint chk_phonenum check(phonenum like 0-90-90-90-90-90-90-90-9),10.3 使用約束,5.default 用于指定某個屬性的默認(rèn)值。當(dāng)數(shù)據(jù)表中的某一列具有大量相同數(shù)據(jù)時,為了減少數(shù)據(jù)錄入的工作量,可以指定默認(rèn)值,則該屬性自動具有了數(shù)據(jù)。 (1)企業(yè)管理器中,10.3 使用約束,5.default (2)T-SQL語句定義default約束 基本格式: constraint 約束名 default 常量表達式 for 字段名,10.3 使用約束,5.default 例10-16 將數(shù)據(jù)庫MagDb中數(shù)據(jù)表mag_emp的屬性EmpRole的默認(rèn)值指定為“編輯”,10.3 使用約束,5.default 使用缺省約束時,應(yīng)該注意以下幾點: 每個字段只能定義一個缺省約束。 如果定義的缺省值長于其對應(yīng)字段的允許長度,那么輸入到表中的缺省值將被截斷。 不能加入到帶有IDENTITY屬性的字段上。,10.3 使用約束,刪除約束 語句格式: alter table 表名 drop constraint 約束名 注意:定義約束的時候若省略了約束名,則要先查出系統(tǒng)自動命名的約束名然后進行刪除.,10.3 使用約束,刪除約束 例10-17 刪除數(shù)據(jù)庫usedb2中數(shù)據(jù)表mag_dept屬性DepManager的UNIQUE約束,第10章 數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表 10.2 修改數(shù)據(jù)庫表 10.3 使用約束 10.4 建立索引 10.5 刪除數(shù)據(jù)庫表,10.4 建立索引,數(shù)據(jù)庫中的索引與書籍中的索引類似。 在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在數(shù)據(jù)庫中,索引使數(shù)據(jù)庫程序無須對整個表進行掃描,就可以在其中找到所需數(shù)據(jù)。 書中的索引是一個詞語列表,其中注明了包含各個詞的頁碼。而數(shù)據(jù)庫中的索引是某個表中一列或者若干列值的集合和相應(yīng)的指向表中物理標(biāo)識這些值的數(shù)據(jù)頁的邏輯指針清單。,10.4 建立索引,索引的作用 通過創(chuàng)建唯一索引,可以保證數(shù)據(jù)記錄的唯一 性。 可以大大加快數(shù)據(jù)檢索速度。 可以加速表與表之間的連接,這一點在實現(xiàn)數(shù)據(jù)的參照完整性方面有特別的意義。,10.4 建立索引,索引的類型 聚集索引(clustered) 是一種物理存儲方式 一個數(shù)據(jù)表只能建立一個聚集索引 非聚集索引(nonclustered) 是一種邏輯存儲方式 索引的次序并不影響數(shù)據(jù)的物理存儲順序 一個數(shù)據(jù)表最多可以建立249個非聚集索引,10.4 建立索引,創(chuàng)建索引的方法 SQL Server 2000創(chuàng)建索引的方法 (1)用企業(yè)管理器直接創(chuàng)建索引。 (2)利用Transact-SQL語句中的CREATE INDEX命令創(chuàng)建索引。,10.4 建立索引,用企業(yè)管理器直接創(chuàng)建索引。 具體步驟如下: ()在企業(yè)管理器中,展開指定的服務(wù)器和數(shù)據(jù)庫,選擇要創(chuàng)建索引的表,用右鍵單擊該表,從彈出的快捷菜單中選擇所有任務(wù)項的管理索引選項,10.4 建立索引,用企業(yè)管理器直接創(chuàng)建索引。 具體步驟如下: 出現(xiàn)管理索引對話框,如圖所示。在該對話框中,可以選擇要處理的數(shù)據(jù)庫和表,管理索引對話框,10.4 建立索引,用企業(yè)管理器直接創(chuàng)建索引。 具體步驟如下: ()單擊“新建”按鈕,則出現(xiàn)新建索引對話框,如圖所示。,(3) 選擇完成后單擊“確定” 按鈕,即可生成新的索引; 單擊“取消”按鈕, 則取消新建索引的操作。,10.4 建立索引,利用Transact-SQL語句中的CREATE INDEX命令創(chuàng)建索引。 建立索引的語法為: create unique clustered|nonclustered index 索引名 on 表名(列名1,列名2) unique:惟一索引 默認(rèn)情況下,創(chuàng)建的索引是非惟一的非聚集索引. 必須先建立聚集索引,再建立非聚集索引.,10.4 建立索引,例10-18 對數(shù)據(jù)表mag_emp屬性EmpAge建立非惟一的非聚集索引age_index,注意: (1)當(dāng)數(shù)據(jù)表建立主鍵后,就自動建立惟一聚集索引 (2)數(shù)據(jù)表使用unique約束后,可自動產(chǎn)生一個非聚集索引,10.4 建立索引,創(chuàng)建索引時一般應(yīng)遵循以下原則 經(jīng)常要查找的列 經(jīng)常要按順序檢索的列 經(jīng)常用于多個數(shù)據(jù)表連接的列 經(jīng)常用于進行統(tǒng)計計算(如求極值、求和等)的列; 在查詢條件中頻繁使用的列 如果一個列中只有幾個不同的數(shù)據(jù)值,或者被索引的列多于20個字節(jié)時,通常不應(yīng)該建立索引,10.4 建立索引,刪除索引的語法 Drop index 表名.索引名 注意使用primary key約束和unique約束建立的索引不能刪除,例10-19 刪除索引age_index,第10章 數(shù)據(jù)庫表,10.1 創(chuàng)建數(shù)據(jù)庫表 10.2 修改數(shù)據(jù)庫表 10.3 使用約束 10.4 建立索引 10.5 刪除數(shù)據(jù)庫表,10.5 刪除數(shù)據(jù)庫表,刪除數(shù)據(jù)表的語法 Drop table 表名,例10-20 刪除usedb2中數(shù)據(jù)表mag_dept,