




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
選取字段數(shù)據(jù)類(lèi)型任務(wù)提出數(shù)據(jù)類(lèi)型決定了數(shù)據(jù)在計(jì)算機(jī)中的存儲(chǔ)格式,代表不同的信息類(lèi)型。要能根據(jù)實(shí)際采用的DBMS為各關(guān)系中的屬性(字段)選取合適數(shù)據(jù)類(lèi)型,以保證數(shù)據(jù)能存儲(chǔ)到各關(guān)系中并能靈活處理。任務(wù)分析不同的DBMS所支持的數(shù)據(jù)類(lèi)型并不完全相同,而且與標(biāo)準(zhǔn)的SQL也有一定差異。為字段選取數(shù)據(jù)類(lèi)型須先理解MySQL支持的常用數(shù)據(jù)類(lèi)型,然后根據(jù)實(shí)際需求為各關(guān)系字段選取合適數(shù)據(jù)類(lèi)型。MySQL支持的常用數(shù)據(jù)類(lèi)型有數(shù)值型、字符型和日期時(shí)間型。1.?dāng)?shù)值型數(shù)據(jù)類(lèi)型相關(guān)知識(shí)與技能數(shù)值型數(shù)據(jù)包括整型、浮點(diǎn)數(shù)、定點(diǎn)數(shù)類(lèi)型。整型類(lèi)型:數(shù)據(jù)類(lèi)型名稱(chēng)說(shuō)明存儲(chǔ)需求TINYINT很小的整數(shù)1字節(jié)SMALLINT小的整數(shù)2字節(jié)MEDIUMINT中等大小的整數(shù)3字節(jié)INT普通大小的整數(shù)4字節(jié)BIGINT大整數(shù)8字節(jié)浮點(diǎn)數(shù)、定點(diǎn)數(shù)類(lèi)型相關(guān)知識(shí)與技能數(shù)據(jù)類(lèi)型名稱(chēng)說(shuō)明Float單精度浮點(diǎn)類(lèi)型Double雙精度浮點(diǎn)類(lèi)型Decimal(M,D)定點(diǎn)數(shù)類(lèi)型,表示一共能存M位,其中小數(shù)點(diǎn)后占D位,M和D稱(chēng)為精度和標(biāo)度。FLOAT、DOUBLE存儲(chǔ)的是近似值,而DECIMAL則以字符串的形式保存數(shù)值,存儲(chǔ)的是精確數(shù)據(jù)。故精確數(shù)據(jù)只能選擇用DECIMAL類(lèi)型。在MySQL中沒(méi)有貨幣類(lèi)型,所以存放與金錢(qián)有關(guān)的數(shù)據(jù)選擇使用DECIMAL。2.字符型數(shù)據(jù)類(lèi)型相關(guān)知識(shí)與技能數(shù)據(jù)類(lèi)型名稱(chēng)說(shuō)明優(yōu)缺點(diǎn)char(n)固定長(zhǎng)度字符串類(lèi)型。n表示能存放的最多字符數(shù),取值范圍為0~255。若存入字符數(shù)小于n,則以空格補(bǔ)于其后,查詢時(shí)再將空格去掉。會(huì)自動(dòng)刪除存入字符串的尾部空格。比較浪費(fèi)空間,但是效率高。適用于電話號(hào)碼、身份證號(hào)等值的長(zhǎng)度基本一致的字段。varchar(n)可變長(zhǎng)度字符串類(lèi)型。n表示能存放的最多字符數(shù),取值范圍為0~65535。不會(huì)刪除存入字符串的尾部空格。比較節(jié)省空間,但效率比CHAR低。適用于數(shù)據(jù)長(zhǎng)度變化較大的字段。TEXT可存儲(chǔ)0~65535字節(jié)長(zhǎng)文本數(shù)據(jù)一般用來(lái)直接存儲(chǔ)一個(gè)比較大的文本,比如說(shuō)一篇文章,一篇新聞等。ENUM(值1,值2,值3…)又稱(chēng)為枚舉類(lèi)型,在創(chuàng)建表時(shí),enum類(lèi)型的取值范圍就以列表的形式指定了enum(可能出現(xiàn)的元素列表)。事先將可能出現(xiàn)的結(jié)果都設(shè)計(jì)好,實(shí)際存儲(chǔ)的數(shù)據(jù)必須是列表中的一個(gè)元素,如SexENUM(‘男’,’女’)。3.日期時(shí)間型數(shù)據(jù)類(lèi)型相關(guān)知識(shí)與技能數(shù)據(jù)類(lèi)型名稱(chēng)格式說(shuō)明Yearyyyy只存儲(chǔ)年份dateyyyy-mm-dd存儲(chǔ)年月日timehh:mm:ss存儲(chǔ)時(shí)分秒datetimeyyyy-mm-ddhh:mm:ss存儲(chǔ)年月日時(shí)分秒,取值范圍是1000-01-0100:00:00到9999-12-3123:59:59Timestampyyyy-mm-ddhh:mm:ss存儲(chǔ)年月日時(shí)分秒,以UTC(世界標(biāo)準(zhǔn)時(shí)間)格式存儲(chǔ)。當(dāng)查詢時(shí),轉(zhuǎn)換為本地時(shí)區(qū)后再顯示。取值范圍是1970-01-0100:00:01UTC到2038-01-1903:14:07UTC。任務(wù)實(shí)施1.為Class表中的字段選取數(shù)據(jù)類(lèi)型。字段名數(shù)據(jù)類(lèi)型字段說(shuō)明ClassNoVARCHAR(50)班級(jí)編號(hào)ClassNameVARCHAR(50)班級(jí)名稱(chēng)CollegeVARCHAR(50)所在學(xué)院SpecialtyVARCHAR(50)所屬專(zhuān)業(yè)EnterYearINT入學(xué)年份任務(wù)總結(jié)字段數(shù)據(jù)類(lèi)型的選取非常關(guān)鍵,關(guān)系到實(shí)際使用中的數(shù)據(jù)能否存儲(chǔ)到數(shù)據(jù)庫(kù)表中,所以必須考慮全面,應(yīng)遵循存儲(chǔ)空間夠用但不浪費(fèi)的原則。創(chuàng)建和管理表任務(wù)提出數(shù)據(jù)庫(kù)中包含了很多對(duì)象,其中最重要、最基本、最核心的對(duì)象就是表。表是實(shí)際存儲(chǔ)數(shù)據(jù)的地方,其他的數(shù)據(jù)庫(kù)對(duì)象都是依附于表對(duì)象而存在的。在數(shù)據(jù)庫(kù)中創(chuàng)建表可以說(shuō)是整個(gè)數(shù)據(jù)庫(kù)應(yīng)用的開(kāi)始,也是數(shù)據(jù)庫(kù)應(yīng)用中至關(guān)重要的一項(xiàng)基礎(chǔ)操作。任務(wù)分析本任務(wù)要求使用CREATETABLE語(yǔ)句完成表的簡(jiǎn)單定義。包括字段名稱(chēng)、字段屬性(字段數(shù)據(jù)類(lèi)型、長(zhǎng)度、是否允許為空、字段默認(rèn)值)等。1.CREATETABLE語(yǔ)句CREATETABLE表名
(列名1列屬性,列名2列屬性,……,列名n列屬性);列屬性包括字段數(shù)據(jù)類(lèi)型、長(zhǎng)度、是否允許為空、字段默認(rèn)值等。相關(guān)知識(shí)與技能(1)數(shù)據(jù)類(lèi)型中,char、varchar數(shù)據(jù)類(lèi)型必須同時(shí)指明長(zhǎng)度,如varchar(10)。而int類(lèi)型后邊的括號(hào)中的值并不會(huì)影響其存儲(chǔ)值的范圍,僅僅指示了整數(shù)值的顯示寬度。例如INT(8)和INT(10)的存儲(chǔ)范圍是一樣的;(2)NULL:表示允許為空,默認(rèn)為允許空,NOTNULL:表示不允許為空。(3)設(shè)置字段默認(rèn)值:DEFAULT
默認(rèn)值(4)在標(biāo)準(zhǔn)SQL中,字符型常量使用的是單引號(hào),MySQL對(duì)SQL的擴(kuò)展,允許使用單引號(hào)和雙引號(hào)兩種。注意事項(xiàng)創(chuàng)建班級(jí)Class表使用CREATETABLE語(yǔ)句在School數(shù)據(jù)庫(kù)中創(chuàng)建學(xué)生成績(jī)管理系統(tǒng)數(shù)據(jù)庫(kù)中的班級(jí)Class表。該表結(jié)構(gòu)的定義如表所示。任務(wù)實(shí)施字段名字段說(shuō)明數(shù)據(jù)類(lèi)型是否允許為空ClassNo班級(jí)編號(hào)VARCHAR(50)否ClassName班級(jí)名稱(chēng)VARCHAR(50)否College所在學(xué)院VARCHAR(50)否Specialty所屬專(zhuān)業(yè)VARCHAR(50)否Enteryear入學(xué)年份INT是2.常用表操作語(yǔ)句語(yǔ)句功能showtables;顯示當(dāng)前數(shù)據(jù)庫(kù)中所有的表名DESCRIBE表名;可簡(jiǎn)寫(xiě)成:DESC表名;或使用:SHOWCOLUMNSFROM表名;SHOWFULLCOLUMNSFROM表名;查看表基本結(jié)構(gòu)(FULL包括字段編碼)Showcreatetable表名;查看表的完整createtable語(yǔ)句Droptable表名;刪除表相關(guān)知識(shí)與技能任務(wù)實(shí)施顯示School數(shù)據(jù)庫(kù)中所有的表名。查看班級(jí)Class表的完整CREATETABLE語(yǔ)句。3.存儲(chǔ)引擎存儲(chǔ)引擎就是存儲(chǔ)數(shù)據(jù)、建立索引、更新查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方式,存儲(chǔ)引擎是基于表的,所以存儲(chǔ)引擎也可稱(chēng)為表類(lèi)型。MySQL存在多種存儲(chǔ)引擎,用戶可以根據(jù)不同的需求為數(shù)據(jù)表選擇不同的存儲(chǔ)引擎。查看MySQL支持的存儲(chǔ)引擎的語(yǔ)句為:SHOWENGINES;從MySQL5.5.8開(kāi)始,InnoDB成為MySQL默認(rèn)的存儲(chǔ)引擎。InnoDB支持事務(wù),支持外鍵。MySQL5.5.8之前,MyISAM是MySQL默認(rèn)的存儲(chǔ)引擎。MyISAM不支持事務(wù),不支持外鍵。相關(guān)知識(shí)與技能4.指定存儲(chǔ)引擎MySQL8默認(rèn)的存儲(chǔ)引擎為InnoDB。創(chuàng)建表時(shí)指定存儲(chǔ)引擎:CREATETABLE表名( ......)ENGINE=存儲(chǔ)引擎;相關(guān)知識(shí)與技能5.設(shè)置編碼統(tǒng)一MySQL8默認(rèn)的編碼是utf8或utf8mb4,在MySQL8中創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建表可以不用指定編碼。若MySQL低版本默認(rèn)的編碼不是utf8,若沒(méi)有在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)直接設(shè)置數(shù)據(jù)庫(kù)的編碼,也可以在創(chuàng)建表時(shí)指定編碼utf8或修改表的編碼。創(chuàng)建表時(shí)指定編碼為utf8的語(yǔ)句語(yǔ)法如下:createtable表名(……)defaultcharset=utf8;相關(guān)知識(shí)與技能任務(wù)總結(jié)通過(guò)本任務(wù)的學(xué)習(xí),完成了使用CREATETABLE語(yǔ)句創(chuàng)建簡(jiǎn)單表,包括定義表中各字段的列名、數(shù)據(jù)類(lèi)型、長(zhǎng)度、是否允許為空、字段默認(rèn)值等。設(shè)置約束任務(wù)提出數(shù)據(jù)庫(kù)中的數(shù)據(jù)是從外界輸入的,由于種種原因,會(huì)發(fā)生輸入無(wú)效或錯(cuò)誤數(shù)據(jù)。數(shù)據(jù)完整性正是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義規(guī)定的數(shù)據(jù)和防止因錯(cuò)誤信息的輸入或輸出造成無(wú)效操作或錯(cuò)誤信息而提出的。任務(wù)分析數(shù)據(jù)完整性是指數(shù)據(jù)的精確性和可靠性。數(shù)據(jù)完整性分為3類(lèi):實(shí)體完整性、參照完整性、用戶自定義的完整性。其中,實(shí)體完整性和參照完整性是任何關(guān)系表必須滿足的完整性約束條件。通過(guò)為表的字段設(shè)置約束來(lái)保證表中數(shù)據(jù)完整性。MySQL包括四大約束,分別是:主鍵約束(PRIMARYKEY)、唯一約束(UNIQUE)、外鍵約束(FOREIGNKEY)、檢查約束(CHECK)。1.主鍵和實(shí)體完整性(1)主鍵主鍵:唯一標(biāo)識(shí)表中每一行的屬性或最小屬性組,主鍵中的各個(gè)屬性稱(chēng)為主屬性,不包含在主鍵中的屬性稱(chēng)為非主屬性。主鍵可以是單個(gè)屬性,也可以是屬性組。例:學(xué)生(學(xué)號(hào),姓名,性別,出生年月,班級(jí)編號(hào)),成績(jī)(學(xué)號(hào),課程編號(hào),平時(shí)成績(jī),期末成績(jī))。(2)實(shí)體完整性實(shí)體完整性規(guī)則:若屬性A是關(guān)系R的主屬性,則屬性A不能取空值。實(shí)體完整性用于保證關(guān)系數(shù)據(jù)庫(kù)表中的每條記錄都是唯一的,建立主鍵的目的就是為了實(shí)現(xiàn)實(shí)體完整性。相關(guān)知識(shí)與技能2.設(shè)置主鍵約束(PRIMARYKEY)(1)在CREATETABLE語(yǔ)句創(chuàng)建表同時(shí)設(shè)置主鍵若主鍵由一個(gè)字段組成:可以在定義列的同時(shí)設(shè)置主鍵,語(yǔ)法規(guī)則如下:字段名數(shù)據(jù)類(lèi)型PRIMARYKEY。也可以在定義完所有列之后設(shè)置主鍵:[CONSTRAINT約束名]PRIMARYKEY(字段名)。主鍵約束名的取名規(guī)則推薦采用:PK_表名。其中Constraint
約束名可以省略,如果省略,約束名采用系統(tǒng)默認(rèn)生成的。相關(guān)知識(shí)與技能任務(wù)實(shí)施【例1】設(shè)置表Class中的ClassNo字段為主鍵。#在定義列的同時(shí)設(shè)置主鍵USESchool;CREATETABLEClass(ClassNo varchar(10)NOTNULLPRIMARYKEY,ClassName varchar(30)NOTNULL,College varchar(30)NOTNULL,Specialty varchar(30)NOTNULL, EnterYear int);任務(wù)實(shí)施【例1】設(shè)置表Class中的ClassNo字段為主鍵。#在定義完所有列之后設(shè)置主鍵CREATETABLEClass(ClassNo varchar(10)NOTNULL,ClassNamevarchar(30)NOTNULL,College varchar(30)NOTNULL,Specialty varchar(30)NOTNULL, EnterYear int,PRIMARYKEY(ClassNo));任務(wù)實(shí)施若主鍵由多個(gè)字段聯(lián)合組成,只能在定義完所有列之后設(shè)置主鍵。[CONSTRAINT約束名]PRIMARYKEY(字段名)。多個(gè)字段名之間使用逗號(hào)分隔?!纠?】設(shè)置表Score中的Sno、Cno字段為主鍵。CREATETABLEScore(Snovarchar(15)NOTNULL,Cnovarchar(10)NOTNULL,Uscore decimal(4,1),EndScoredecimal(4,1),PRIMARYKEY(Sno,Cno));(2)使用ALTERTABLE語(yǔ)句修改表添加主鍵約束ALTERTABLE表名ADD[CONSTRAINT約束名]PRIMARYKEY(字段名);【例3】設(shè)置表Student中的Sno字段為主鍵。ALTERTABLEStudentADDPRIMARYKEY(Sno);3.設(shè)置表的屬性自動(dòng)增加在數(shù)據(jù)庫(kù)應(yīng)用中,通過(guò)為某字段添加AUTO_INCREMENT關(guān)鍵字,實(shí)現(xiàn)每次插入新記錄時(shí),系統(tǒng)自動(dòng)生成該字段的值。一個(gè)表只能有一個(gè)字段設(shè)置為AUTO_INCREMENT,并且該字段必須為主鍵的一部分。設(shè)置為AUTO_INCREMENT字段的數(shù)據(jù)類(lèi)型必須為整數(shù)類(lèi)型。相關(guān)知識(shí)與技能任務(wù)實(shí)施【例4】創(chuàng)建數(shù)據(jù)表Teacher,字段包括ID、TeacherName、College,指定ID字段的值自動(dòng)遞增。USESchool;CREATETABLETeacher(IDintAUTO_INCREMENT
PRIMARYKEY,TeacherNamevarchar(50),Collegevarchar(50));4.唯一約束UNIQUE約束應(yīng)用于表中的非主鍵列,用于指定一個(gè)或者多個(gè)列的組合的值具有唯一性,以防止在列中輸入重復(fù)的值。UNIQUE約束與PRIMARYKEY約束:一張表可以設(shè)置多個(gè)UNIQUE約束,而PRIMARYKEY約束在一個(gè)表中只能有一個(gè);設(shè)置了UNIQUE約束的列值必須唯一,如果字段允許為空,可以有空值。而設(shè)置了PRIMARYKEY約束的列值必須唯一,而且不允許為空。相關(guān)知識(shí)與技能任務(wù)實(shí)施【例5】設(shè)置表Class中的ClassName字段值為唯一。#在定義列的同時(shí)設(shè)置唯一約束USESchool;CREATETABLEClass(ClassNovarchar(10)NOTNULLPRIMARYKEY,ClassNamevarchar(30)NOTNULLUNIQUE,College varchar(30)NOTNULL,Specialtyvarchar(30)NOTNULL, EnterYearint);任務(wù)實(shí)施【例5】設(shè)置表Class中的ClassName字段值為唯一。#在定義完所有列之后設(shè)置唯一約束CREATETABLEClass(ClassNo varchar(10)NOTNULLPRIMARYKEY,ClassNamevarchar(30)NOTNULL,College varchar(30)NOTNULL,Specialty varchar(30)NOTNULL, EnterYearint,UNIQUE(ClassName));若唯一約束由多個(gè)字段聯(lián)合組成,只能在定義完所有列之后設(shè)置唯一約束:[CONSTRAINT約束名]UNIQUE(字段名)。多個(gè)字段名之間使用逗號(hào)分隔。(2)使用ALTERTABLE語(yǔ)句修改表添加唯一約束ALTERTABLE表名ADD[CONSTRAINT約束名]UNIQUE(字段名);【例6】設(shè)置表Course中的Cname字段值為唯一。ALTERTABLECourseADDUNIQUE(Cname);5.檢查約束檢查約束也稱(chēng)為CHECK約束,該約束通過(guò)條件表達(dá)式去判斷輸入值是否滿足條件。作用是限制表中一列或多列的輸入值,保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的用戶自定義完整性。例如,限制成績(jī)字段只能輸入0~100之間的數(shù)據(jù)、性別字段的值只能為男或女。MySQL從8.0.16版本開(kāi)始,添加了針對(duì)所有存儲(chǔ)引擎的CHECK約束的核心特性,可以在CREATETABLE語(yǔ)句創(chuàng)建表同時(shí)設(shè)置CHECK約束,也可以使用ALTERTABLE語(yǔ)句修改表添加CHECK約束。相關(guān)知識(shí)與技能(1)在CREATETABLE語(yǔ)句創(chuàng)建表同時(shí)設(shè)置CHECK約束若CHECK約束只涉及一個(gè)字段,可以在定義列的同時(shí)設(shè)置CHECK,語(yǔ)法如下:字段名數(shù)據(jù)類(lèi)型CHECK(條件表達(dá)式)也可以在定義完所有列之后設(shè)置CHECK,語(yǔ)法如下:[CONSTRAINT約束名]CHECK(條件表達(dá)式)其中,CHECK約束名的取名規(guī)則推薦采用:CK_字段名。“CONSTRAINT約束名]”可以省略,如果省略,約束名采用系統(tǒng)默認(rèn)生成的。相關(guān)知識(shí)與技能任務(wù)實(shí)施【例7】給Student表中的Sex字段設(shè)置檢查約束,在輸入值時(shí)只允許輸入“男”或“女”。#方法1:定義列的同時(shí)設(shè)置CHECK約束USESchool;CREATETABLEIFNOTEXISTSStudent(SnoVARCHAR(50)NOTNULLPRIMARYKEY,SnameVARCHAR(50)NOTNULL,SexVARCHAR(10)NOTNULLCHECK(Sex='男'ORSex='女'),BirthDATE,ClassNoVARCHAR(50)NOTNULL);#方法2:在定義完所有列之后設(shè)置CHECK約束CREATETABLEIFNOTEXISTSStudent(SnoVARCHAR(50)NOTNULLPRIMARYKEY,SnameVARCHAR(50)NOTNULL,SexVARCHAR(10)NOTNULL,BirthDATE,ClassNoVARCHAR(50)NOTNULL,CHECK(Sex='男'ORSex='女'));任務(wù)實(shí)施【注意】若CHECK約束涉及表的多個(gè)字段,只能在定義完所有列之后設(shè)置CHECK約束?!纠?】在School數(shù)據(jù)庫(kù)中設(shè)置入住表Live的字段OutDate的值必須晚于字段InDate的值。CREATETABLEIFNOTEXISTSLive(SnoVARCHAR(50)NOTNULL,DormNoVARCHAR(50)NOTNULL,BedNoVARCHAR(10)NOTNULL,InDateDATENOTNULL,OutDateDATE,PRIMARYKEY(Sno,InDate),CHECK(InDate<OutDate));(2)使用ALTERTABLE語(yǔ)句修改表添加CHECK約束ALTERTABLE表名ADD[CONSTRAINT約束名]CHECK(條件表達(dá)式);【例9】設(shè)置約束使得Score表中Uscore字段、Endscore字段的值在0~100之間。ALTERTABLEScoreADDCONSTRAINTCK_UscoreCHECK(Uscore>=0ANDUscore<=100);ALTERTABLEScoreADDCONSTRAINTCK_EndScoreCHECK(EndScore>=0ANDEndScore<=100);6.外鍵和參照完整性(1)外鍵A表中有列X,該列不是所在表A的主鍵,但可以是主屬性,它參照了另一張表B的主鍵字段或者具有唯一約束的字段Y,稱(chēng)列X為所在表A的外鍵(外碼)。被參照的那個(gè)表B稱(chēng)為主表,而表A稱(chēng)為從表。列X稱(chēng)為參照列,列Y稱(chēng)為被參照列。(2)參照完整性參照完整性規(guī)則:如果表中存在外鍵,則外鍵的值必須與主表中的某條記錄的被參照列的值相同,如果外鍵列允許為空則或者外鍵的值為空。參照完整性用于確保相關(guān)聯(lián)表間的數(shù)據(jù)保持一致。相關(guān)知識(shí)與技能7.設(shè)置外鍵約束(FOREIGNKEY)(1)在CREATETABLE語(yǔ)句創(chuàng)建表同時(shí)設(shè)置外鍵在定義完所有列之后設(shè)置外鍵:[CONSTRAINT約束名]FOREIGNKEY(外鍵字段名)REFERENCES主表名(被參照字段名)。外鍵約束名的取名規(guī)則推薦采用FK_從表名_主表名。相關(guān)知識(shí)與技能任務(wù)實(shí)施【例10】給Student表的ClassNo字段設(shè)置外鍵約束,使該字段的值參照Class表的主鍵字段ClassNo。CREATETABLEifnotexistsStudent(Sno varchar(15)NOTNULLPRIMARYKEY,Sname varchar(10)NOTNULL,Sex char(4)NOTNULL,Birth date,ClassNo varchar(10)NOTNULL,FOREIGNKEY(ClassNo)REFERENCESClass(ClassNo));(2)使用ALTERTABLE語(yǔ)句修改表添加外鍵約束ALTERTABLE表名ADD[CONSTRAINT約束名]FOREIGNKEY(外鍵字段名)REFERENCES主表名(被參照字段名);【例11】給Score表的Sno字段設(shè)置外鍵約束,使該字段的值參照Student表的主鍵字段Sno,外鍵約束名為FK_Score_Student。ALTERTABLEScoreADDCONSTRAINTFK_Score_StudentFOREIGNKEY(Sno)REFERENCESStudent(Sno);注意事項(xiàng)外鍵列必須參照另外一張表的主鍵字段或者唯一約束字段;外鍵列的數(shù)據(jù)類(lèi)型必須和主表的被參照列的數(shù)據(jù)類(lèi)型相同;外鍵列必須和主表的被參照列的編碼方式相同;外鍵列的字段名可以和被參照列的字段名不同;MyISAM存儲(chǔ)引擎不支持外鍵。MySQL5.5.8之前默認(rèn)的存儲(chǔ)引擎是MyISAM。相關(guān)知識(shí)與技能任務(wù)總結(jié)主鍵約束用于滿足實(shí)體完整性。主鍵列的值必須唯一,并且不允許為空。一張表只能設(shè)置一個(gè)主鍵約束。設(shè)置了唯一約束的列的值必須唯一,允許為空,可以有空值。一張表可以設(shè)置多個(gè)唯一約束。CHECK約束用于滿足自定義完整性。通過(guò)表達(dá)式限定字段輸入值的范圍。外鍵約束用于滿足參照完整性。外鍵不能是所在表的主鍵,但可以是主屬性。外鍵參照的主表列必須是主鍵字段或是設(shè)置唯一約束的字段。使用ALTERTABLE語(yǔ)句修改表結(jié)構(gòu)任務(wù)提出使用CREATETABLE語(yǔ)句創(chuàng)建表后,經(jīng)常會(huì)根據(jù)實(shí)際情況需要進(jìn)一步對(duì)已存在的表作一些必要的修改操作,如增加新的字段、修改某些字段、刪除字段、修改表名等。另外為了保證表中數(shù)據(jù)的完整性和數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)的一致性,必須給表添加約束等。任務(wù)分析修改表的SQL語(yǔ)句是ALTERTABLE語(yǔ)句。本任務(wù)完成使用ALTERTABLE語(yǔ)句進(jìn)行表結(jié)構(gòu)的修改和約束的設(shè)置。1.添加、刪除、修改字段(1)添加新字段ALTERTABLE表名
ADD新字段名數(shù)據(jù)類(lèi)型;(2)修改已有字段的數(shù)據(jù)類(lèi)型ALTERTABLE表名
MODIFY字段名新數(shù)據(jù)類(lèi)型;(3)修改已有字段名和數(shù)據(jù)類(lèi)型ALTERTABLE表名
CHANGE舊字段名新字段名數(shù)據(jù)類(lèi)型;(4)刪除已有字段ALTERTABLE表名
DROP字段名;相關(guān)知識(shí)與技能【例】在班級(jí)表Class中新增加字段Id,其類(lèi)型為int。ALTERTABLEClassADDIdint;【例】刪除班級(jí)表Class中的ID字段的操作。ALTERTABLEClassDROPId;【例】修改Class表中的字段ClassName的長(zhǎng)度為40。ALTERTABLEClassMODIFYClassNamevarchar(40);任務(wù)實(shí)施2.添加、刪除默認(rèn)值(1)添加默認(rèn)值A(chǔ)LTERTABLE表名
ALTERCOLUMN字段名SETDEFAULT默認(rèn)值;(2)刪除默認(rèn)值A(chǔ)LTERTABLE表名
ALTERCOLUMN字段名DROPDEFAULT;相關(guān)知識(shí)與技能【例】添加Class表中的字段College的默認(rèn)值為“信息工程學(xué)院”。ALTERTABLEClassALTERCOLUMNCollegeSETDEFAULT'信息工程學(xué)院';【例】刪除Class表中的字段College的默認(rèn)值。ALTERTABLEClassALTERCOLUMNCollegeDROPDEFAULT;任務(wù)實(shí)施3.添加約束(1)添加主鍵約束ALTERTABLE表名
ADD[CONSTRAINT約束名]PRIMARYKEY(主鍵字段名);(2)添加外鍵約束ALTERTABLE表名
ADD[CONSTRAINT約束名]FOREIGNKEY(外鍵字段名)REFERENCES主表(主鍵字段名);相關(guān)知識(shí)與技能3.添加約束(3)添加唯一約束ALTERTABLE表名
ADD[CONSTRAINT約束名]UNIQUE(字段名);(4)添加檢查約束ALTERTABLE表名ADD[CONSTRAIN約束名]CHECK(條件表達(dá)式);相關(guān)知識(shí)與技能【例】設(shè)置表Class中的ClassNo字段為主鍵。ALTERTABLEClassADDCONSTRAINTPK_ClassPRIMARYKEY(ClassNo);【例】給Student表的ClassNo字段設(shè)置外鍵約束,使該字段的值參照Class表的主鍵字段ClassNo,外鍵約束名為FK_Student_Class。ALTERTABLEStudentADDCONSTRAINTFK_Student_ClassFOREIGNKEY(ClassNo)REFERENCESClass(ClassNo);任務(wù)實(shí)施【例】給Class表的ClassName字段設(shè)置唯一約束,約束名為UQ_ClassName。ALTERTABLEClassADDCONSTRAINTUQ_ClassNameUNIQUE(ClassName);【例】添加約束使得Student表中Sex字段的值只能輸入“男”或“女”。約束名為CK_Sex。ALTERTABLEStudentADDCONSTRAINTCK_SexCHECK(Sex='男'ORSex='女');任務(wù)實(shí)施4.刪除約束(1)刪除主鍵約束ALTERTABLE表名DROPPRIMARYKEY;(2)刪除外鍵約束ALTERTABLE表名DROPFOREIGNKEY外鍵約束名;
(3)刪除唯一約束ALTERTABLE表名DROPINDEX唯一約束名;
(4)刪除CHECK檢查約束ALTERTABLE表名DROPCONSTRAINT檢查約束名;相關(guān)知識(shí)與技能【例】刪除Student表的ClassNo字段上的外鍵約束。#通過(guò)查看表的完整CREATETABLE語(yǔ)句,得到外鍵約束名SHOWCREATETABLEStudent;ALTERTABLEStudentDROPFOREIGNKEY外鍵約束名;【例】刪除Class中的主鍵約束。ALTERTABLEClassDROPPRIMARYKEY;【例】刪除Class表的ClassName字段中的唯一約束,約束名為UQ_ClassName。ALTERTABLEClassDROPINDEXUQ_ClassName;【例】刪除Student表的Sex字段中的檢查約束,約束名為CK_Sex。ALTERTABLEStudent
DROPCONSTRAINTCK_Sex;任務(wù)實(shí)施任務(wù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年:租賃合同貼花范本解析
- 2025年固定資產(chǎn)升級(jí)改造借款合同
- 2025授權(quán)銷(xiāo)售合同委托書(shū)模板
- 脾良性腫瘤的臨床護(hù)理
- 新質(zhì)生產(chǎn)力發(fā)展動(dòng)力
- 2025年租賃農(nóng)民土地的長(zhǎng)期租賃合同
- 嵌頓性腹股溝斜疝的臨床護(hù)理
- 《數(shù)據(jù)驅(qū)動(dòng)業(yè)務(wù)》課件
- 2025【租房合同范本】個(gè)人租房合同協(xié)議書(shū)模板
- 2025雙方與合作伙伴的租賃合同范本參考
- 2025至2030中國(guó)射頻芯片市場(chǎng)趨勢(shì)展望及需求前景研究報(bào)告
- 《詞匯構(gòu)建法:課件中的詞根詞綴解析》
- 應(yīng)急急救知識(shí)課件
- 文綜中考試卷及答案解析
- 鼠傷寒沙門(mén)菌護(hù)理查房
- K30自動(dòng)生成及計(jì)算試驗(yàn)記錄
- 新能源項(xiàng)目融資策略-全面剖析
- 安徽省 2025 年九年級(jí)中考?xì)v史模擬試卷二(含答案)
- (完整)教育心理學(xué)-各章節(jié)重點(diǎn)學(xué)習(xí)筆記
- 建筑行業(yè)施工期間意外傷害免責(zé)協(xié)議
- 民兵國(guó)防知識(shí)教育教案
評(píng)論
0/150
提交評(píng)論