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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、; 打開(kāi)數(shù)據(jù)庫(kù) USEUSE ;USEUSE XSCJ; 刪除數(shù)據(jù)庫(kù) DROP DATABASE DROP DATABASE ;DROP DATABASE DROP DATABASE XSCJ; 一個(gè)數(shù)據(jù)庫(kù)在打開(kāi)的時(shí)候是不能刪除的SQLSQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù) 以下語(yǔ)句創(chuàng)建了一個(gè)名為T(mén)estDB的數(shù)據(jù)庫(kù)。創(chuàng)建數(shù)據(jù)庫(kù)的相關(guān)信息大家都可以從代碼中讀出來(lái)。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語(yǔ)句大小寫(xiě)不敏感,用大寫(xiě)還是小寫(xiě)都能識(shí)別!語(yǔ)句大小寫(xiě)不敏感,用大寫(xiě)還是小寫(xiě)都能識(shí)別!建表示例:學(xué)生信息表建表示例:學(xué)生信息表創(chuàng)建這張表的步驟創(chuàng)建這張表的步驟確定每一列的數(shù)據(jù)類(lèi)型確定每一列的數(shù)據(jù)類(lèi)型創(chuàng)建無(wú)數(shù)據(jù)的空表創(chuàng)建無(wú)數(shù)據(jù)的空表添加數(shù)據(jù)添加數(shù)據(jù)學(xué)號(hào)姓名性別高考分?jǐn)?shù)班級(jí)身份證號(hào)照片指紋9912101 李榮浩 男 388.513軟工11234567890123456781312102 上官劉晨 男 44213信管11000000000000000020512103 陸盈盈

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

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

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

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

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

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

11、每一列的數(shù)據(jù)類(lèi)型確定每一列的數(shù)據(jù)類(lèi)型2.2.創(chuàng)建無(wú)數(shù)據(jù)的空表創(chuàng)建無(wú)數(shù)據(jù)的空表3.3.添加數(shù)據(jù)添加數(shù)據(jù)學(xué)號(hào)姓名性別高考分?jǐn)?shù)班級(jí)身份證號(hào)照片指紋9912101 李榮浩 男 388.513軟工11234567890123456781312102 上官劉晨 男 44213信管11000000000000000020512103 陸盈盈女 631.513電商1QLSQL語(yǔ)句創(chuàng)建表語(yǔ)句創(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) )學(xué)生表結(jié)構(gòu)學(xué)生表結(jié)構(gòu)列名列名數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型是否允許空是否允許空學(xué)號(hào)Char(7)不允許空姓名nvarchar(8)不允許空性別Nchar(2)不允許空高考分?jǐn)?shù)Decimal(4,1)班級(jí)Nvarchar(10)不允許空身份證號(hào)Ch

13、ar(18)不允許空照片Varchar(50)指紋image默認(rèn)默認(rèn)null,可以不寫(xiě),可以不寫(xiě)課堂練習(xí)課堂練習(xí)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ù)類(lèi)型數(shù)據(jù)類(lèi)型是否允許空是否允許空描述描述reader_IDreader_ID Char(6)否讀者編號(hào)rnamernameNvarchar(8)否讀者姓名sexsexNvarch

14、ar(2)否性別birthdatebirthdate smalldatetime出生日期設(shè)置自動(dòng)編號(hào)設(shè)置自動(dòng)編號(hào)創(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ù)類(lèi)型數(shù)據(jù)類(lèi)型是否允許空是否允許空描述描述xhintintNot null序號(hào),要求自動(dòng)增長(zhǎng)編號(hào)bIDChar(10)否圖書(shū)編號(hào)rIDChar(6)否讀者編號(hào)borrowdatedatetime否借閱日期borrowSSMS

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

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

17、的修改基本表的修改 - - - -學(xué)生表中增加一列學(xué)生表中增加一列“手機(jī)號(hào)碼手機(jī)號(hào)碼”ALTER TABLE 學(xué)生表ADD 手機(jī)號(hào)碼 char(11);- - -學(xué)生表中學(xué)生表中“學(xué)號(hào)學(xué)號(hào)”列長(zhǎng)度改為列長(zhǎng)度改為1010位位ALTER TABLE 學(xué)生表Alter column 學(xué)號(hào) char(10);- - -學(xué)生表中刪除學(xué)生表中刪除“指紋指紋”列列ALTER TABLE 學(xué)生表DROP COLUMN 指紋;課堂練習(xí)課堂練習(xí)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表原先“學(xué)號(hào)”的數(shù)據(jù)類(lèi)型為Char(10),現(xiàn)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

34、約束對(duì)話框 方法二:使用方法二:使用SQLSQL語(yǔ)句創(chuàng)建外鍵約束語(yǔ)句創(chuàng)建外鍵約束使用SQL語(yǔ)句設(shè)置外部鍵約束 ,其語(yǔ)法形式如下: CONSTRAINT 外鍵約束名 FOREIGN KEY (外鍵約束的列名) REFERENCES 主鍵表 (主鍵表中的主鍵列名)與前面創(chuàng)建主鍵類(lèi)似,也可在建表時(shí)用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ù)類(lèi)型約束reader_IDchar(10) 主鍵,外鍵,參照reader表中reader_idbook_IDchar(10) 主鍵,外鍵,參照book表中book_idborrowdate datetime 默認(rèn)值為當(dāng)前的系統(tǒng)時(shí)間表級(jí)完整性約束(表級(jí)完整性約束(外外鍵鍵),建在表的末尾處),建在表的末尾處創(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ù)類(lèi)型約束reader_IDchar(10)主鍵,外鍵,參照reader表中reader_idbook_IDchar(10)主鍵,外鍵,參照book表中book_idborrowdatedatetime默認(rèn)值為當(dāng)前的系統(tǒng)時(shí)間列級(jí)完整性約束(列級(jí)完整性約束

37、(外外鍵鍵),建在字段后面),建在字段后面表級(jí)完整性約束表級(jí)完整性約束(組合組合主鍵主鍵)創(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ù)類(lèi)型約束reader_IDchar(10)主鍵,外鍵,參照reader表中reader_idbook_IDchar(10)主鍵,外鍵,參照book表中book_idborrowdatedatetime默認(rèn)值為當(dāng)前的系統(tǒng)時(shí)間列級(jí)完整性約束表級(jí)完整性約束在已有表中添加和刪除約束在已有表中添加和刪除約束語(yǔ)法格式:ALTER TABLE ADD CONSTRAINT 約束定義; -添加約束ALTER TABLE DROP CONSTRAINT; -刪除約束添加主鍵添加主鍵 語(yǔ)法:語(yǔ)

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添加外鍵添加外鍵 語(yǔ)法: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級(jí)聯(lián)更新、刪除級(jí)聯(lián)更新、刪除ALTER TABLE ADD CONSTRAINT Foreign Ke

溫馨提示

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

評(píng)論

0/150

提交評(píng)論