第6次課表的創(chuàng)建與修改,完整性約束_第1頁
第6次課表的創(chuàng)建與修改,完整性約束_第2頁
第6次課表的創(chuàng)建與修改,完整性約束_第3頁
第6次課表的創(chuàng)建與修改,完整性約束_第4頁
第6次課表的創(chuàng)建與修改,完整性約束_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、表的創(chuàng)建與修改表的創(chuàng)建與修改, ,完整性約束完整性約束信息工程學院信息工程學院SQLSQL的產(chǎn)生和發(fā)展的產(chǎn)生和發(fā)展 最早的版本有IBM提出Structured Query Language 最新的版本是SQL-99 主流關(guān)系數(shù)據(jù)庫產(chǎn)品采用的是在SQL-92標準的基礎(chǔ)上自己擴展而來 SQL SERVER的語句叫Transact SQLTransact SQL Oracle的語句叫PL/SQL MySQL的SQL語句與其他的也有所不同SQLSQL的特點的特點 一體化一體化 集DDL、DML、DCL功能于一體。 高度非過程化高度非過程化 只需“做什么”,無須“怎么做”。 簡潔簡潔 接近自然語言 創(chuàng)建

2、表:CREATE TABLE 以多種方式使用以多種方式使用 命令式 嵌入到程序設(shè)計語言中SQLSQL的組成部分的組成部分 數(shù)據(jù)定義(數(shù)據(jù)定義(DDLDDL) 定義、刪除、修改數(shù)據(jù)庫(Database) 定義、刪除、修改表(Table)、視圖(View) 定義、刪除、修改索引(Index) 數(shù)據(jù)操縱(數(shù)據(jù)操縱(DMLDML) 數(shù)據(jù)查詢 數(shù)據(jù)增、刪、改 數(shù)據(jù)控制(數(shù)據(jù)控制(DCLDCL) 用戶訪問權(quán)限的授予、收回 數(shù)據(jù)定義數(shù)據(jù)定義數(shù)據(jù)庫定義數(shù)據(jù)庫定義 創(chuàng)建數(shù)據(jù)庫 CREATE DATABASE CREATE DATABASE ;CREATE DATABASECREATE DATABASE XSCJ

3、; 打開數(shù)據(jù)庫 USEUSE ;USEUSE XSCJ; 刪除數(shù)據(jù)庫 DROP DATABASE DROP DATABASE ;DROP DATABASE DROP DATABASE XSCJ; 一個數(shù)據(jù)庫在打開的時候是不能刪除的SQLSQL語句創(chuàng)建數(shù)據(jù)庫語句創(chuàng)建數(shù)據(jù)庫 以下語句創(chuàng)建了一個名為TestDB的數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫的相關(guān)信息大家都可以從代碼中讀出來。CREATE DATABASE TestDB ON (NAME = TestDB, FILENAME = D:TestDB.mdf, SIZE = 20 MB, FILEGROWTH = 0)LOG ON (NAME = TestDB_L

4、og, FILENAME = D:TestDB_Log.ldf, SIZE = 5 MB, FILEGROWTH = 0)SQL語句大小寫不敏感,用大寫還是小寫都能識別!語句大小寫不敏感,用大寫還是小寫都能識別!建表示例:學生信息表建表示例:學生信息表創(chuàng)建這張表的步驟創(chuàng)建這張表的步驟確定每一列的數(shù)據(jù)類型確定每一列的數(shù)據(jù)類型創(chuàng)建無數(shù)據(jù)的空表創(chuàng)建無數(shù)據(jù)的空表添加數(shù)據(jù)添加數(shù)據(jù)學號姓名性別高考分數(shù)班級身份證號照片指紋9912101 李榮浩 男 388.513軟工11234567890123456781312102 上官劉晨 男 44213信管11000000000000000020512103 陸盈盈

5、女 631.513電商1設(shè)我們現(xiàn)在要在數(shù)據(jù)庫中創(chuàng)建下面的學生信息表,步驟是怎樣的呢?假設(shè)我們現(xiàn)在要在數(shù)據(jù)庫中創(chuàng)建下面的學生信息表,步驟是怎樣的呢?數(shù)據(jù)庫的數(shù)據(jù)類型數(shù)據(jù)庫的數(shù)據(jù)類型 數(shù)值型 字符型 日期型 貨幣型 二進制型 數(shù)據(jù)類型在不同數(shù)據(jù)庫產(chǎn)品中有差異,這里是指數(shù)據(jù)類型在不同數(shù)據(jù)庫產(chǎn)品中有差異,這里是指SQL SQL SERVERSERVER中的數(shù)據(jù)類型中的數(shù)據(jù)類型確定數(shù)據(jù)類型確定數(shù)據(jù)類型學生信息表列名列名數(shù)據(jù)類型數(shù)據(jù)類型學號姓名性別高考分數(shù)班級身份證號照片指紋學號姓名性別高考分數(shù)班級身份證號照片指紋9912101 李榮浩 男 388.599軟工112

6、34567890123456781312102 上官劉晨 男 44213信管11000000000000000020512103 陸盈盈女 631.507電商1定數(shù)據(jù)類型確定數(shù)據(jù)類型學號姓名性別高考分數(shù)班級身份證號照片指紋9912101 李榮浩 男 388.599軟工11234567890123456781312102 上官劉晨 男 44213信管11000000000000000020512103 陸盈盈女 631.507電商1名列名數(shù)據(jù)類型數(shù)據(jù)類型理由理由學號Char(7)第一個數(shù)字可能是0,且數(shù)據(jù)的長度固定不

7、變姓名nvarchar(8) 可以有多種選擇性別Nchar(2)固定長高考分數(shù)Decimal(5,1) 使用Numeric(5,1)是一模一樣的班級Nvarchar(10) Unicode型所有字符都是2個字節(jié)身份證號Char(18)照片Varchar(50) 一般保存圖片在服務(wù)器中的路徑和文件名指紋image數(shù)值型數(shù)值型準確型準確型整數(shù)Int:4字節(jié) Smallint:2字節(jié) tinyint :1字節(jié)小數(shù) (建議使用準確小數(shù)型)(建議使用準確小數(shù)型)Numeric(p,q)或Decimal(p,q)近似型近似型(不建議使用)(不建議使用) Float:8字節(jié) Real:4字節(jié)年齡選擇什么類型

8、? Tinyint夠不夠? 價格? 3687.88 99.7 131452.99這組數(shù)據(jù),什么類型合適?超過bigint的定義范圍的整數(shù)該怎么解決?詳細介紹見書上相關(guān)表格,這里只介紹常用的、需注意的字符型字符型 CHAR, VARCHAR, TEXT nCHAR, nVARCHAR, nTEXT1、姓名 CHAR( 10 ) 柴靜 李榮浩 姓名2 varchar(10) 柴靜 李榮浩 姓名 和 姓名2 這兩列有什么區(qū)別?2、微博內(nèi)容,需要記錄日文,英文,中文,應(yīng)該用什么數(shù)據(jù) 類型?3、中國大陸的手機號碼,用什么類型? 字符串類型的數(shù)據(jù)兩端用單引號括起來,如how are you,1234等都是

9、字符串的數(shù)據(jù) 請注意數(shù)據(jù)庫中字符和字符串都是用單引號 12313,2.343是數(shù)值型數(shù)據(jù) 數(shù)字型字符與數(shù)值用單引號來區(qū)別字符型字符型 日期時間型日期時間型 Datetime:8字節(jié),年月日時分秒毫秒(例:2001/08/03 10:30:00.000 ) SmallDateTime:4字節(jié),年月日時分 (例: 2001/08/03 10:30:00 ) 日期、時間的輸入格式試列出實際生活中需要精確到毫秒和不需要精確到毫秒的時間數(shù)據(jù)。日期時間類型日期時間類型 l SQL Server的日期時間數(shù)據(jù)類型是將日期和時間合起來存儲。l 日期的格式: Oct 25 2001 2001-10-25 200

10、1/10/25 20011025注:日期型數(shù)據(jù)使用單引號括起來注:日期型數(shù)據(jù)使用單引號括起來貨幣類型貨幣類型 貨幣數(shù)據(jù)類型表示貨幣值。貨幣數(shù)據(jù)存儲的精確度固定為四位小數(shù)。 SQL92或SQL99沒有對應(yīng)的貨幣類型,Oracle等數(shù)據(jù)庫產(chǎn)品中也沒有貨幣類型。 建議使用decimal類型代替二進制類型二進制類型 Binary(n):固定長度,n = 8000 Varbinary(n):可變長度,n 8000 注:n為二進制數(shù)據(jù)的字節(jié)數(shù) image:大容量、可變長二進制字符數(shù)據(jù),可用于存儲文件。網(wǎng)站中上傳的圖片一般情況下是如何保存的呢?學生信息表學生信息表創(chuàng)建這張表的步驟創(chuàng)建這張表的步驟1.1.確定

11、每一列的數(shù)據(jù)類型確定每一列的數(shù)據(jù)類型2.2.創(chuàng)建無數(shù)據(jù)的空表創(chuàng)建無數(shù)據(jù)的空表3.3.添加數(shù)據(jù)添加數(shù)據(jù)學號姓名性別高考分數(shù)班級身份證號照片指紋9912101 李榮浩 男 388.513軟工11234567890123456781312102 上官劉晨 男 44213信管11000000000000000020512103 陸盈盈女 631.513電商1QLSQL語句創(chuàng)建表語句創(chuàng)建表CREATE TABLE CREATE TABLE ( null | not null , );CREATE TABLE CREATE TABLE students( (sno

12、char(7) not null, , sname nvarchar(8) not null, , ssex nchar(2) not null, , score decimal(4,1) , ,class nvarchar(10) not null , ,sfzh char(18) not null , ,tp varchar(50) , ,zw image) )學生表結(jié)構(gòu)學生表結(jié)構(gòu)列名列名數(shù)據(jù)類型數(shù)據(jù)類型是否允許空是否允許空學號Char(7)不允許空姓名nvarchar(8)不允許空性別Nchar(2)不允許空高考分數(shù)Decimal(4,1)班級Nvarchar(10)不允許空身份證號Ch

13、ar(18)不允許空照片Varchar(50)指紋image默認默認null,可以不寫,可以不寫課堂練習課堂練習1 1:創(chuàng)建讀者表:創(chuàng)建讀者表參考答案:CREATE TABLE Reader (Reader_ID CHAR(6) not null,name NVARCHAR(8) not null,sex NVARCHAR(2) not null,birthdate SMALLDATETIME)reader列名列名數(shù)據(jù)類型數(shù)據(jù)類型是否允許空是否允許空描述描述reader_IDreader_ID Char(6)否讀者編號rnamernameNvarchar(8)否讀者姓名sexsexNvarch

14、ar(2)否性別birthdatebirthdate smalldatetime出生日期設(shè)置自動編號設(shè)置自動編號創(chuàng)建借閱表CREATE TABLE Borrow(Xh int not null identity(1,1),bID CHAR(10) not null,RID CHAR(6) not null,Borrowdate DATETIME not null)列名列名數(shù)據(jù)類型數(shù)據(jù)類型是否允許空是否允許空描述描述xhintintNot null序號,要求自動增長編號bIDChar(10)否圖書編號rIDChar(6)否讀者編號borrowdatedatetime否借閱日期borrowSSMS

15、SSMS圖形工具表設(shè)計器建表創(chuàng)建數(shù)據(jù)表圖形工具表設(shè)計器建表創(chuàng)建數(shù)據(jù)表選中要建表的數(shù)據(jù)庫右鍵新建表創(chuàng)建Books表修改表也是同樣的兩種方式修改表也是同樣的兩種方式 用SSMS圖形工具的表設(shè)計器直接修改,方法同剛剛講的建表(同學們自己動手試試,此處不再講解)修改表時可能系統(tǒng)不讓你修改,思考下為什么會有這樣的設(shè)置?修改表時可能系統(tǒng)不讓你修改,思考下為什么會有這樣的設(shè)置? 用SQL 語句中的ALTER TABLE語句修改表此處默認是打鉤的,也就此處默認是打鉤的,也就是不讓你修改表的結(jié)構(gòu),是不讓你修改表的結(jié)構(gòu),要把勾去掉才能修改表要把勾去掉才能修改表基本表的修改基本表的修改假設(shè)我們剛剛創(chuàng)建的假設(shè)我們剛剛

16、創(chuàng)建的studentsstudents表要進行如下修改:表要進行如下修改: 增加一列:聯(lián)系電話;增加一列:聯(lián)系電話; 學號長度需要調(diào)整,學號長度需要調(diào)整,7 7位改為位改為1010位;位; 刪除指紋列。刪除指紋列。SQL語言使用ALTER TABLE命令可以實現(xiàn): 增加新列:ADD 修改原有的列定義: ALTER COLUMN 刪除列: DROP COLUMN 基本表的修改的語法基本表的修改的語法語法格式為: ALTER TABLE ADD ; -添加新列 ALTER TABLE ALTER COLUMN ; -修改已有列定義 ALTER TABLE DROP COLUMN ; -刪除列基本表

17、的修改基本表的修改 - - - -學生表中增加一列學生表中增加一列“手機號碼手機號碼”ALTER TABLE 學生表ADD 手機號碼 char(11);- - -學生表中學生表中“學號學號”列長度改為列長度改為1010位位ALTER TABLE 學生表Alter column 學號 char(10);- - -學生表中刪除學生表中刪除“指紋指紋”列列ALTER TABLE 學生表DROP COLUMN 指紋;課堂練習課堂練習2 2:修改表:修改表 Reader表中添加兩列:職業(yè)profession、聯(lián)系電話phone ALTER TABLE Reader ADD profession CHAR

18、(20), phone char(11) 將Reader表中的profession列修改為char(30),聯(lián)系電話改為char(13) ALTER TABLE Reader ALTER COLUMN profession CHAR(30) ALTER TABLE Reader ALTER COLUMN phone CHAR(13) 刪除Reader表中的profession列和phone列 ALTER TABLE Reader DROP COLUMN profession ,phone2:11關(guān)于修改表的思考?關(guān)于修改表的思考? Students表原先“學號”的數(shù)據(jù)類型為Char(10),現(xiàn)

19、在改為char(7)是否可以?如何驗證? 若students表中已有數(shù)據(jù),以下語句能否成功執(zhí)行? ALTER TABLE students ADD 手機號碼 char(11) not null;注意:表中有數(shù)據(jù)時,表中有數(shù)據(jù)時, 增加的列不能增加的列不能not nullnot null 修改的長度不能小于原數(shù)據(jù)的長度修改的長度不能小于原數(shù)據(jù)的長度 數(shù)據(jù)類型不能轉(zhuǎn)換的不允許修改數(shù)據(jù)類型不能轉(zhuǎn)換的不允許修改刪除表刪除表 DROP TABLE , 刪除students表(學生信息表) DROP TABLE students 刪除book、reader、borrow表(一次刪除多個表) drop ta

20、ble book,reader,borrow數(shù)據(jù)完整性數(shù)據(jù)完整性學生表學生表學號學號姓名姓名年齡年齡身份證身份證系別系別13011301nullNull李榮浩李榮浩劉強東劉強東馬云馬云陸盈盈陸盈盈18null1718330227199303174026330105199308300017330105199306061324nullX01X02X03X04系別號系別號系名系名X01計算機系計算機系X02信管系信管系X03軟件系軟件系通過設(shè)置約束約束,保證保證數(shù)據(jù)庫中的數(shù)據(jù)是完整、一完整、一致、正確致、正確的系別信息表系別信息表關(guān)系完整性約束關(guān)系完整性約束 實體完整性實體完整性 主鍵(非空且不重復(fù)

21、非空且不重復(fù)) 參照完整性參照完整性 外鍵(表示表間列值的參照關(guān)系表示表間列值的參照關(guān)系) 用戶自定義完整性用戶自定義完整性 非空:不允許空值不允許空值 唯一:不可重復(fù),允許空值不可重復(fù),允許空值 檢查:設(shè)置該列值的范圍設(shè)置該列值的范圍 缺省值(默認):當新輸入的數(shù)據(jù)沒指定值時,當新輸入的數(shù)據(jù)沒指定值時,就將默認值存儲在數(shù)據(jù)表中就將默認值存儲在數(shù)據(jù)表中主鍵約束主鍵約束(PRIMARY KEY) 1.1.主鍵(主鍵(PRIMARY KEYPRIMARY KEY)約束)約束 PRIMARY KEY約束用于定義基本表的主鍵,它是惟一確定表中每一條記錄的標識符,又稱主碼。其值不能為NULL,也不能重復(fù)

22、,以此來保證實體的完整性。 下表中(學號)為主碼,則學號不能取空值,亦不得重復(fù)。學號學號姓名姓名性別性別身份證身份證系別系別13011301nullNull李榮浩李榮浩劉強東劉強東馬云馬云陸盈盈陸盈盈男男男男女女女女330227199303174026330105199308300017330105199306061324nullX01X02X03X04學號學號姓名姓名性別性別身份證身份證系別系別13011301nullNull李榮浩李榮浩劉強東劉強東馬云馬云陸盈盈陸盈盈男男男男女女女女330227199303174026330105199308300017330105199306061324

23、nullX01X02X03X04方法 (1) SQL Server管理平臺操創(chuàng)建選擇多個字段共同做為主鍵需要選擇多個字段共同做為主鍵需要同時選中這幾個字段,如圖所示同時選中這幾個字段,如圖所示創(chuàng)建主鍵創(chuàng)建主鍵方法二:使用方法二:使用SQLSQL語句創(chuàng)建主鍵語句創(chuàng)建主鍵(1)建表時在字段上創(chuàng)建create table students(sno char(7) primary key,)(2)建表時在末尾非標準創(chuàng)建create table students( (sno char(7) not null , zw image,primary key (sno) )(3)建表時在末尾標準創(chuàng)建語法:CO

24、NSTRAINT 主鍵名 PRIMARY KEY (列名)上面的最后一句改成: CONSTRAINT PK_Students primary key (sno) 關(guān)于主鍵名,可以由創(chuàng)建者自己取,一般系統(tǒng)習慣取名為PK_表名此時設(shè)為主鍵的字段可不必再寫此時設(shè)為主鍵的字段可不必再寫not null,因為隱含了不為空的信息,因為隱含了不為空的信息constraint knstreint n.強制, 約束組合主鍵只能用后面兩種方法定義組合主鍵只能用后面兩種方法定義唯一性約束唯一性約束(unique)(unique) 惟一性約束用于指定一個或者多個列的組合值具有惟一性,以防止在列中輸入重復(fù)的值 唯一性約

25、束與主鍵約束的區(qū)別:主鍵約束一個表只能有一個,而唯一性約束可創(chuàng)建多個、主鍵不能為空而唯一性約束可以。 學生表中,學號是主鍵,身份證號就可以定義為惟一性約束學號學號姓名姓名性別性別身份證身份證系別系別1301130213041303李榮浩李榮浩劉強東劉強東馬云馬云陸盈盈陸盈盈男男男男F女女330227199303174026330227199303174026330105199306061324nullX01X02X03null學號學號姓名姓名性別性別身份證身份證系別系別1301130213041303李榮浩李榮浩劉強東劉強東馬云馬云陸盈盈陸盈盈男男男男F女/p>

26、330227199303174026330105199306061324nullX01X02X03null創(chuàng)建唯一性約束創(chuàng)建唯一性約束方法 (1) SQL Server管理平臺操創(chuàng)建選中某個表-右鍵設(shè)計選擇列- 索引/鍵如果創(chuàng)建了主如果創(chuàng)建了主鍵,在這里也鍵,在這里也可以看到可以看到方法二:使用方法二:使用SQLSQL語句創(chuàng)建唯一性約束語句創(chuàng)建唯一性約束(1)建表時在字段上創(chuàng)建create table students(sfzh char(18) unique,)(2)建表時在末尾非標準創(chuàng)建create table students( (zw image,primary key (sno),u

27、nique (sfzh) )(3)建表時在末尾標準創(chuàng)建語法:CONSTRAINT 唯一性約束名 UNIQUE (列名)上面的最后一句改成: CONSTRAINT uq_Students unique (sfzh) 關(guān)于唯一性約束名,可以由創(chuàng)建者自己取,一般系統(tǒng)習慣取名為IX_表名(因為跟創(chuàng)建索引是在一個地方)此時設(shè)為唯一性約束的字段如果不可為空,一定要指明此時設(shè)為唯一性約束的字段如果不可為空,一定要指明not null檢查約束(檢查約束(checkcheck) 檢查約束對輸入列或者整個表中的值設(shè)置檢查條件,以限制輸入值,保證數(shù)據(jù)庫數(shù)據(jù)的完整性。 比如:要求學生年齡的約束為15-30歲的話,一旦

28、你設(shè)置好后, 輸入8或65就輸不進去了!如果已經(jīng)輸入了的話,它就會顯示錯誤。再比如:學生信息表中設(shè)置了性別的檢查約束只能是“男”或者“女”,就不能輸入其他的信息。學號學號姓名姓名性別性別身份證身份證系別系別1301130213041303李榮浩李榮浩劉強東劉強東馬云馬云陸盈盈陸盈盈男男男男F女女330227199303174026330227199303174026330105199306061324nullX01X02X03null學號學號姓名姓名性別性別身份證身份證系別系別1301130213041303李榮浩李榮浩劉強東劉強東馬云馬云陸盈盈陸盈盈男男男男F女女33022719930317

29、4026330227199303174026330105199306061324nullX01X02X03null創(chuàng)建檢查約束創(chuàng)建檢查約束方法 (1) SQL Server管理平臺操創(chuàng)建選中某列-右鍵-CHECK約束方法二:使用方法二:使用SQLSQL語句創(chuàng)建檢查約束語句創(chuàng)建檢查約束(1)建表時在字段上創(chuàng)建create table students(ssex nchar(2) check(ssex=男or ssex=女),)(2)建表時在末尾非標準創(chuàng)建create table students( (zw image,primary key (sno),unique (sfzh),check (

30、ssex=男or ssex=女) )(3)建表時在末尾標準創(chuàng)建語法:CONSTRAINT 檢查約束名 CHECK (邏輯表達式)上面的最后一句改成: CONSTRAINT CK_Students check (ssex=男or ssex=女)關(guān)于唯一性約束名,可以由創(chuàng)建者自己取,一般系統(tǒng)習慣取名為CK_表名課堂練習課堂練習3 3 使用SQL語句建立一個學生選課信息SC表,表中有學號sno,課程號cno,成績score。請為該表設(shè)置主鍵,并定義SCORE 的取值范圍為0到100之間。 建立一個學生表stu(學生編號sno,姓名sname,年齡sage,家庭地址address,聯(lián)系電話tel),定

31、義年齡的取值范圍為0到30之間,學生編號為主鍵,姓名為唯一性約束.默認約束默認約束 (DEFAULTDEFAULT) 默認約束指定在插入操作中如果沒有提供輸入值,則系統(tǒng)自動按默認約束的設(shè)置指定值。默認約束可以包括常量、函數(shù)、不帶變元的內(nèi)建函數(shù)或者空值。 使用默認約束時,應(yīng)該注意以下幾點:(1)每個字段只能定義一個默認約束;(2)如果定義的默認值長于其對應(yīng)字段的允許長度, 那么輸入到表中的默認值將被截斷;(3)不能在設(shè)置為IDENTITY屬性或者數(shù)據(jù)類型為timestamp(時間戳)的字段上創(chuàng)建默認約束;(4)如果某字段設(shè)置為not null,則設(shè)置默認約束沒有任何意義創(chuàng)建默認約束創(chuàng)建默認約束

32、方法 (1) SQL Server管理平臺操創(chuàng)建圖5-10 創(chuàng)建默認約束對話框 方法二:使用方法二:使用SQLSQL語句創(chuàng)建默認約束語句創(chuàng)建默認約束其語法形式如下: CONSTRAINT 默認約束名稱 DEFAULT 默認約束表達式 FOR 列名(放在表的末尾)例1:為ssex字段創(chuàng)建默認約束“男”。constraint DF_students default 計算機 for dept例2:為 dept字段創(chuàng)建默認約束“計算機”。constraint DF_dept default 計算機 for dept 外鍵(外碼)約束 student dept學號學號姓名姓名性別性別系別系別1301李榮

33、浩李榮浩女女X011302劉強東劉強東男男X011303馬云馬云男男X041304陸盈盈陸盈盈女女X02系別號系別號系名系名X01計算機系計算機系X02信管系信管系X03軟工系軟工系參照被參照表被參照表(主表)(主表)參照表參照表(從表)(從表)主碼外碼Null值值可以嗎?可以嗎?外鍵 參照關(guān)系和和被參照關(guān)系可以是同一張表學號姓名性別年齡專業(yè)號班長學號801張三女1901802802李四男2001null803王五男2001802804趙六女2002805805錢七男1902null外碼主碼創(chuàng)建外鍵約束創(chuàng)建外鍵約束 第一種方法:在SQL Server管理平臺中添加外部鍵約束圖5-12 創(chuàng)建外鍵

34、約束對話框 方法二:使用方法二:使用SQLSQL語句創(chuàng)建外鍵約束語句創(chuàng)建外鍵約束使用SQL語句設(shè)置外部鍵約束 ,其語法形式如下: CONSTRAINT 外鍵約束名 FOREIGN KEY (外鍵約束的列名) REFERENCES 主鍵表 (主鍵表中的主鍵列名)與前面創(chuàng)建主鍵類似,也可在建表時用3種方式創(chuàng)建創(chuàng)建借閱表創(chuàng)建借閱表Borrow(P34)Borrow(P34)CREATE TABLE Borrow(book_ID CHAR(10) PRIMARY KEY,Reader_ID CHAR(10) PRIMARY KEY,Borrowdate DATETIME default getdate

35、(),FOREIGN KEY(book_ID) REFERENCES Book(book_ID), FOREIGN KEY(Reader_ID) REFERENCES Reader(Reader_ID) )列名數(shù)據(jù)類型約束reader_IDchar(10) 主鍵,外鍵,參照reader表中reader_idbook_IDchar(10) 主鍵,外鍵,參照book表中book_idborrowdate datetime 默認值為當前的系統(tǒng)時間表級完整性約束(表級完整性約束(外外鍵鍵),建在表的末尾處),建在表的末尾處創(chuàng)建借閱表創(chuàng)建借閱表Borrow(P34)Borrow(P34)CREATE T

36、ABLE Borrow(book_ID CHAR(10) REFERENCES Book(book_ID),Reader_ID CHAR(10) REFERENCES Reader(Reader_ID),Borrowdate DATETIME default getdate(),PRIMARY KEY(book_ID,Reader_ID)列名數(shù)據(jù)類型約束reader_IDchar(10)主鍵,外鍵,參照reader表中reader_idbook_IDchar(10)主鍵,外鍵,參照book表中book_idborrowdatedatetime默認值為當前的系統(tǒng)時間列級完整性約束(列級完整性約束

37、(外外鍵鍵),建在字段后面),建在字段后面表級完整性約束表級完整性約束(組合組合主鍵主鍵)創(chuàng)建借閱表創(chuàng)建借閱表Borrow(P34)Borrow(P34)CREATE TABLE Borrow(book_ID CHAR(10) ,Reader_ID CHAR(10),Borrowdate DATETIME default getdate(),constraint PK_Borrow PRIMARY KEY(book_ID,Reader_ID),constraint FK_B_B Foreign key(book_id) REFERENCES Book(book_ID),constraint F

38、K_B_R Foreign key(reader_id) REFERENCES Reader(Reader_ID)列名數(shù)據(jù)類型約束reader_IDchar(10)主鍵,外鍵,參照reader表中reader_idbook_IDchar(10)主鍵,外鍵,參照book表中book_idborrowdatedatetime默認值為當前的系統(tǒng)時間列級完整性約束表級完整性約束在已有表中添加和刪除約束在已有表中添加和刪除約束語法格式:ALTER TABLE ADD CONSTRAINT 約束定義; -添加約束ALTER TABLE DROP CONSTRAINT; -刪除約束添加主鍵添加主鍵 語法:語

39、法:ALTER TABLE ADD CONSTRAINT Primary Key(列名,n); 在student表的sno列上添加主碼ALTER TABLE student ADD PRIMARY KEY(sno); 添加Sc表的主鍵ALTER TABLE sc ADD constraint pk_sc PRIMARY KEY(sno,cno);由系統(tǒng)分配由系統(tǒng)分配約束名約束名自己定義約束名列名列名約束約束sno主碼cno主碼grade添加外鍵添加外鍵 語法:ALTER TABLE ADD CONSTRAINT Foreign Key(列名,n) references 主表表名(主表的列名); 添加Sc表的外鍵ALTER TABLE sc ADD FOREIGN KEY(sno) REFERENCES student(sno);ALTER TABLE sc ADD constraint fk_sc_cno FOREIGN KEY(cno) REFERENCES course(cno);由系統(tǒng)分配由系統(tǒng)分配約束名約束名自己定義約束名列名列名約束約束sno外碼,引用student的snocno外碼,引用course的cnograde級聯(lián)更新、刪除級聯(lián)更新、刪除ALTER TABLE ADD CONSTRAINT Foreign Ke

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論