數(shù)據(jù)庫PPT第5章 數(shù)據(jù)庫的創(chuàng)建與管理_第1頁
數(shù)據(jù)庫PPT第5章 數(shù)據(jù)庫的創(chuàng)建與管理_第2頁
數(shù)據(jù)庫PPT第5章 數(shù)據(jù)庫的創(chuàng)建與管理_第3頁
數(shù)據(jù)庫PPT第5章 數(shù)據(jù)庫的創(chuàng)建與管理_第4頁
數(shù)據(jù)庫PPT第5章 數(shù)據(jù)庫的創(chuàng)建與管理_第5頁
已閱讀5頁,還剩132頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫的創(chuàng)建與管理第5章教學(xué)目標(biāo)理解MySQL數(shù)據(jù)表的基本概念01掌握數(shù)據(jù)庫的創(chuàng)建與管理02掌握表的創(chuàng)建、維護(hù)與修改方法03掌握如何在表中添加、修改和刪除數(shù)據(jù)記錄04掌握表的復(fù)制與刪除方法05§5.1數(shù)據(jù)庫的創(chuàng)建5.1.1創(chuàng)建數(shù)據(jù)庫CREATEDATABASE[IFNOTEXISTS]數(shù)據(jù)庫名稱

[CHARACTERSET字符集

][COLLATE校驗規(guī)則];注意:分號是每條語句的結(jié)束標(biāo)記IFNOTEXISTS:在創(chuàng)建online_sales_system數(shù)據(jù)庫之前,首先判斷數(shù)據(jù)庫是否存在,若存在則不再創(chuàng)建,也不會報錯,如果不存在則會創(chuàng)建該數(shù)據(jù)庫;如果不做判斷直接創(chuàng)建,若數(shù)據(jù)庫已經(jīng)存在,就會有錯誤信息提示。CHARSET字符集5.1.1創(chuàng)建數(shù)據(jù)庫數(shù)據(jù)庫名:數(shù)據(jù)庫名必須符合操作系統(tǒng)文件夾的命名規(guī)則。MySQL在Windows系統(tǒng)下默認(rèn)不區(qū)分大小寫,在Linux系統(tǒng)下默認(rèn)區(qū)分大小寫。CHARSET(8.0及以后等價于CHARACTERSET)用來設(shè)置數(shù)據(jù)庫采用的字符集,字符集是一套字符內(nèi)容與編碼方式的集合。省略表示采用默認(rèn)值utf8mb4。COLLATE用來設(shè)置數(shù)據(jù)庫校對規(guī)則,校對規(guī)則指對特定字符集比較時的排序規(guī)則。省略表示采用默認(rèn)值utf8mb4_0900_ai_ci?!?.1數(shù)據(jù)庫的創(chuàng)建5.1.1創(chuàng)建數(shù)據(jù)庫【例5.1】用CREATEDATABASE命令創(chuàng)建一個數(shù)據(jù)庫online_sales_system,存儲引擎、字符集和校驗規(guī)則采用默認(rèn)值。CREATEDATABASEonline_sales_systemCHARSETutf8mb4COLLATEutf8mb4_0900_ai_ci;QueryOK,1rowaffected(0.00sec)的含義:語句成功運行,使用時間為0.00秒。說明SQL語句運行速度很快,不到0.01秒?!?.1數(shù)據(jù)庫的創(chuàng)建5.1.2管理數(shù)據(jù)庫----1.顯示數(shù)據(jù)庫語法格式:【例5.2】用SHOWDATABASES命令顯示所有數(shù)據(jù)庫;(大小寫均可)SHOWDATABASES;SHOWDATABASES;§5.1數(shù)據(jù)庫的創(chuàng)建5.1.2管理數(shù)據(jù)庫----1.顯示數(shù)據(jù)庫1)information_schema數(shù)據(jù)庫:存儲了數(shù)據(jù)庫的元數(shù)據(jù)(databasemetadata),元數(shù)據(jù)是關(guān)于MySQL服務(wù)器的信息,例如數(shù)據(jù)庫或表的名稱、列的數(shù)據(jù)類型或訪問權(quán)限等,有時也稱為數(shù)據(jù)字典(datadictionary)或系統(tǒng)目錄(systemcatalog)。2)mysql數(shù)據(jù)庫:提供了MySQL服務(wù)器運行時所需信息的表,包括用于存儲數(shù)據(jù)庫對象元數(shù)據(jù)(databaseobjectmetadata)的數(shù)據(jù)字典表,以及諸如日志系統(tǒng)表、時區(qū)系統(tǒng)表等一系列系統(tǒng)表。3)performance_schema數(shù)據(jù)庫:用于監(jiān)控服務(wù)器的執(zhí)行性能,并提供執(zhí)行時的信息的訪問。sys數(shù)據(jù)庫:此數(shù)據(jù)庫主要是利用performance_schema數(shù)據(jù)庫提供的信息,生成一系列的視圖、存儲過程和存儲函數(shù),幫助數(shù)據(jù)庫管理人員和開發(fā)者了解系統(tǒng)的性能?!?.1數(shù)據(jù)庫的創(chuàng)建【例5.3】用USE命令選擇數(shù)據(jù)庫,選擇當(dāng)前數(shù)據(jù)庫。USEonline_sales_system;5.1.2管理數(shù)據(jù)庫----2.打開數(shù)據(jù)庫語法格式:USE數(shù)據(jù)庫名稱;數(shù)據(jù)庫切換成功§5.1數(shù)據(jù)庫的創(chuàng)建【例5.4】查看網(wǎng)絡(luò)購物數(shù)據(jù)庫online_sales_system中包含的數(shù)據(jù)表等對象。SHOW

TABLES;5.1.2管理數(shù)據(jù)庫----3.查看數(shù)據(jù)庫信息查看數(shù)據(jù)庫對象語法格式:SHOWTABLES;數(shù)據(jù)庫名稱數(shù)據(jù)庫onlin_sales_system1中包含的對象§5.1數(shù)據(jù)庫的創(chuàng)建數(shù)據(jù)庫對象包括:數(shù)據(jù)表、索引、視圖、存儲過程等【例5.5】查看網(wǎng)絡(luò)購物數(shù)據(jù)庫online_sales_system采用的字符集。5.1.2管理數(shù)據(jù)庫----3.查看數(shù)據(jù)庫信息查看字符集的語法格式:SHOWVARIABLESLIKE'character_set_database';§5.1數(shù)據(jù)庫的創(chuàng)建【例5.6】查看網(wǎng)絡(luò)購物數(shù)據(jù)庫online_sales_system采用的校驗規(guī)則。5.1.2管理數(shù)據(jù)庫----3.查看數(shù)據(jù)庫信息查看校驗規(guī)則的語法格式:SHOWVARIABLESLIKE'collation_database';§5.1數(shù)據(jù)庫的創(chuàng)建【例5.7】查看網(wǎng)絡(luò)購物數(shù)據(jù)庫online_sales_system的詳細(xì)信息。5.1.2管理數(shù)據(jù)庫----3.查看數(shù)據(jù)庫信息查看數(shù)據(jù)庫定義的詳細(xì)信息的語法格式:SHOWCREATE

DATABASE數(shù)據(jù)庫名稱;SHOWCREATE

DATABASE

online_sales_system;§5.1數(shù)據(jù)庫的創(chuàng)建字符集校驗規(guī)則是否加密DROPDATABASEIFEXISTSonline_sales_system;5.1.2管理數(shù)據(jù)庫----4.刪除數(shù)據(jù)庫刪除數(shù)據(jù)庫的語法格式:DROPDATABASE[IFEXISTS]數(shù)據(jù)庫名稱;【例5.8】用DROPDATABASE命令刪除online_sales_system數(shù)據(jù)庫。IF

EXISTS:在刪除online_sales_system數(shù)據(jù)庫之前,首先判斷數(shù)據(jù)庫是否存在,若存在則刪除,否則不執(zhí)行刪除運算;如果不做判斷直接刪除,若數(shù)據(jù)庫不存在,就會出現(xiàn)錯誤的提示?!?.1數(shù)據(jù)庫的創(chuàng)建5.1.2管理數(shù)據(jù)庫----4.刪除數(shù)據(jù)庫【例5.9】使用DROPDATABASE語句刪除數(shù)據(jù)庫時,使用IFEXISTS可選項和不使用IFEXISTS可選項兩種情況再刪除一次數(shù)據(jù)庫online_sales_system?!?.1數(shù)據(jù)庫的創(chuàng)建MySQL對象包括數(shù)據(jù)庫、表、視圖、索引、存儲過程或存儲函數(shù)等。這些對象名稱統(tǒng)稱為標(biāo)識符,標(biāo)識符必須符合一定規(guī)則或約定,各個DBMS的約定不完全相同。在MySQL中,數(shù)據(jù)表是數(shù)據(jù)庫中最重要、最基本的操作對象,是存儲數(shù)據(jù)的基本單位。如果把數(shù)據(jù)庫比喻成柜子,那么表就像柜子中各種規(guī)格的抽屜。一個表就是一個關(guān)系,表實質(zhì)上就是行列的集合,每一行代表一條記錄,每一列代表記錄的一個字段。每個表由若干行組成,表的第一行為各列標(biāo)題,其余行都是數(shù)據(jù)。§5.2認(rèn)識數(shù)據(jù)表1)標(biāo)識符可以由當(dāng)前字符集中的任何字母、漢字、數(shù)字字符組成,另外,還可以包括下劃線(_)和美元符號($)。但一般不建議使用漢字作為標(biāo)識符。

2)標(biāo)識符最長為64個字符。但標(biāo)識符的長度受限于所用操作系統(tǒng)限定的長度。3)標(biāo)識符應(yīng)盡可能做到“見名知義”。

4)用戶自己定義的標(biāo)識符可以直接使用,如果標(biāo)識符名與系統(tǒng)保留字(關(guān)鍵字)重名時,應(yīng)該用反引號(``)括起來。但建議在給對象命名時,應(yīng)避免和系統(tǒng)的保留字重名。

5)操作系統(tǒng)中的文件系統(tǒng)是否大小寫敏感,會影響到如何命名和引用數(shù)據(jù)庫對象。如果文件系統(tǒng)大小寫敏感(如UNIX),名字為tbl_items、TBL_items和tbl_ITEMS是三個不同的標(biāo)識符。如果文件系統(tǒng)大小寫不敏感(如Windows),那么這三個名字指的是一個標(biāo)識符,也就是對應(yīng)一個對象。標(biāo)識符的命名規(guī)則如下:§5.2認(rèn)識數(shù)據(jù)表1.表的名稱在當(dāng)前數(shù)據(jù)庫中操作數(shù)據(jù)表時,表名之前的數(shù)據(jù)庫名限定可以省略,只有在處理屬于兩個不同數(shù)據(jù)庫中的數(shù)據(jù)表時,才需要用完整的數(shù)據(jù)表名。數(shù)據(jù)庫名.表名完整的數(shù)據(jù)表名稱應(yīng)該由數(shù)據(jù)庫名和表名兩部分組成,其格式如下:§5.2認(rèn)識數(shù)據(jù)表2.數(shù)據(jù)表MySQL的表擁有列(Column)和行(Row)。列即是字段(Field),而每一行中的各個字段的數(shù)據(jù)構(gòu)成一條數(shù)據(jù)記錄(Record)。數(shù)據(jù)表表的結(jié)構(gòu)表的內(nèi)容(數(shù)據(jù)、記錄)§5.2認(rèn)識數(shù)據(jù)表【例5.10】顯示客戶表customers的數(shù)據(jù),了解表的構(gòu)成。2.數(shù)據(jù)表字段字段字段字段第一行是表的結(jié)構(gòu)記錄記錄記錄§5.2認(rèn)識數(shù)據(jù)表記錄3.表的結(jié)構(gòu)表的結(jié)構(gòu)定義即決定表擁有哪些字段以及這些字段的特性。所謂“字段特性”是指這些字段的名稱、數(shù)據(jù)類型、長度、精度、小數(shù)位數(shù)、是否允許空值(NULL)、設(shè)置默認(rèn)值、主碼等?!纠?.11】使用DESC語句查看客戶表customers的表結(jié)構(gòu)?!?.2認(rèn)識數(shù)據(jù)表4.字段名(1)字段名最長可達(dá)64個字符。(2)字段名可包含中文、英文字母、數(shù)字、下劃線符號(_)、#字符號()、$貨幣符號。字段名可以用中文(建議盡量不要使用中文字段名)。(3)字段名應(yīng)盡可能做到“見名知義”。通過字段名稱就可以知道字段表示的屬性值的含義,從而增強(qiáng)可讀性。(4)同一個表中,各個字段的名稱不能重復(fù)。(5)字段名不能使用MySQL語言中的關(guān)鍵字,如:DROP、ALTER、INSERT、CREATE等。表可以擁有多個字段,各個字段分別用來存儲不同性質(zhì)的數(shù)據(jù),字段名同樣必須符合MySQL的命名規(guī)則。§5.2認(rèn)識數(shù)據(jù)表5.表間關(guān)系在關(guān)系數(shù)據(jù)庫中,一個數(shù)據(jù)庫系統(tǒng)一般都包含多個表,表間也會存在聯(lián)系。表間聯(lián)系是通過外鍵(外碼)來實現(xiàn)的,也是體現(xiàn)了關(guān)系之間的參照完整性。主表(父表)從表(子表)主表(父表)從表(子表)從表(子表)主表(父表)§5.2認(rèn)識數(shù)據(jù)表數(shù)值數(shù)據(jù)類型:包括整數(shù)類型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮點小數(shù)類型FLOAT和DOUBLE,定點小數(shù)類型DECIMAL。日期/時間類型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。字符串類型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。二進(jìn)制類型:包括BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。MySQL提供多種數(shù)據(jù)類型,數(shù)據(jù)類型是對數(shù)據(jù)存儲方式的一種約定,它能夠規(guī)定數(shù)據(jù)的操作方式和存儲所占空間的大小。MySQL數(shù)據(jù)庫使用不同的數(shù)據(jù)類型存儲數(shù)據(jù),主要根據(jù)實際需求(數(shù)據(jù)值的內(nèi)容、大小、精度)來選擇合適的數(shù)據(jù)類型。§5.3數(shù)據(jù)類型5.3.1數(shù)值類型MySQL支持所有的ANSI/ISOSQL92數(shù)字類型,包括整數(shù)和小數(shù)。其中整數(shù)用整數(shù)類型表示;小數(shù)用浮點數(shù)類型和定點數(shù)類型表示。數(shù)據(jù)類型字節(jié)數(shù)無符號數(shù)的取值范圍有符號數(shù)的取值范圍TINYINT10~255-128~127SMALLINT20~65535-32768~32767MEDIUMINT30~16777215-8388608~8388607INT或INTEGER40~4294967295-2147483648~2147483647BIGINT80~18446744073709551615-9223372036854775808~9223372036854775807MySQL的整數(shù)類型表—----整數(shù)類型§5.3數(shù)據(jù)類型5.3.1數(shù)值類型——整數(shù)類型注:MySQL允許指定整數(shù)值的顯示寬度,INT(M)表示該整數(shù)值最大有效顯示寬度為M。例如INT(10)表示最大顯示寬度為10。在MySQL8.x及以后版本不再支持設(shè)置顯示寬度。顯示寬度與存儲大小、類型包含的值的范圍無關(guān);實際數(shù)據(jù)位數(shù)<M時,由空格(或0)填充(右對齊:填在左側(cè))。實際數(shù)據(jù)位數(shù)>M時,顯示完整數(shù)據(jù)。如果在定義表結(jié)構(gòu)時不指定顯示寬度,系統(tǒng)則為該字段指定默認(rèn)的顯示寬度?!?.3數(shù)據(jù)類型5.3.1數(shù)值類型——浮點數(shù)類型MySQL中使用浮點數(shù)和定點數(shù)表示小數(shù);其中浮點類型有兩種:單精度浮點類型FLOAT和雙精度浮點類型DOUBLE;定點數(shù)類型只有一種DECIMAL。用(M,D)來定義小數(shù),其中M稱為精度,表示總共的位數(shù);D稱為標(biāo)度,表示小數(shù)的位數(shù)。其中M和D的取值范圍是:M(1~255),D(1~30,且不能大于M-2)數(shù)據(jù)類型字節(jié)數(shù)負(fù)數(shù)的取值范圍非負(fù)數(shù)的取值范圍FLOAT4-3.402823466E+38~-1.175494351E-380和1.175494351E-38~3.402823466E+38DOUBLE8-1.7976931E+308~-2.2250738E-3080和2.2250738E-308~1.7976931E+308MySQL的浮點數(shù)類型表§5.3數(shù)據(jù)類型5.3.1數(shù)值類型——定點數(shù)類型定點數(shù)類型DECIMAL實際是以字符串存儲的。DECIMAL可能的最大取值范圍與DOUBLE一樣;但其有效的取值范圍由M和D決定。M固定,則其取值范圍將隨著D的變大而變小,但精度增加;D固定,則其取值范圍將隨著M的變大而變大。DECIMAL的存儲空間不是固定的,由M和D決定:若M>D,則字節(jié)數(shù)為M+2;若D>M,則字節(jié)數(shù)為D+2。數(shù)據(jù)類型字節(jié)數(shù)負(fù)數(shù)的取值范圍非負(fù)數(shù)的取值范圍DEC(M,D)、DECIMAL(M,D)如果M>D為M+2,否則為D+2-1.7976931E+308~-2.2250738E-3080和2.2250738E-308~1.7976931E+308MySQL的定點數(shù)類型表§5.3數(shù)據(jù)類型5.3.1數(shù)值類型

1)在能夠容納所有數(shù)據(jù)的前提下,盡可能選擇最小的可用類型。例如年齡,正常的值在0到120之間,則可以使用TINYINT,這樣數(shù)據(jù)占用內(nèi)存少,數(shù)據(jù)處理也更簡單。2)在需要表示的精度要求比較高的時候,比如貨幣、用于科學(xué)計算用的數(shù)據(jù)等,優(yōu)先選擇定點數(shù)類型DECIMAL。

3)不論定點類型還是浮點類型,如果用戶指定的精度值超過系統(tǒng)定義的精度范圍,則會進(jìn)行四舍五入。4)因為浮點數(shù)存在誤差,也盡量避免兩個數(shù)值相近的浮點數(shù)進(jìn)行大小比較。在創(chuàng)建表時,數(shù)字類型的選擇應(yīng)遵循一下原則:§5.3數(shù)據(jù)類型5.3.2日期時間類型MySQL支持5種日期類型:包括YEAR、DATE、TIME、DATETIME和TIMESTAMP。日期時間類型字節(jié)數(shù)范圍格式用途DATE41000-01-01~9999-12-31YYYY-MM-DD日期值TIME3-838:59:59~838:59:59HH:MM:SS時間值YEAR11901~2155YYYY年份值DATETIME81000-01-0100:00:00~9999-12-3123:59:59YYYY-MM-DDHH:MM:SS混合日期和時間值TIMESTAMP419700101080001~2038年的某一時刻YYYYMMDDHHMMSS時間戳§5.3數(shù)據(jù)類型5.3.2日期時間類型(1)DATE類型的字段一般使用函數(shù)CURRENT_DATE()或NOW()插入計算機(jī)系統(tǒng)的當(dāng)前日期;(2)在給DATETIME類型的字段賦值時,可以使用字符串類型或者數(shù)值類型,只需符合DATETIME格式;(3)DATETIME和TIMESTAMP的顯示格式相同,顯示寬度為19個字符;但TIMESTAMP的取值范圍??;(4)DATETIME按實際輸入的格式存儲,和時區(qū)無關(guān);(5)TIMESTAMP是以UTC(世界標(biāo)準(zhǔn)時間)格式存儲,在進(jìn)行查詢時,根據(jù)讀者所在時區(qū)不同,顯示的日期時間值是不同的。形式上,日期類型的表示方法與字符串的表示方法相同,使用單引號括起來;本質(zhì)上,日期類型的數(shù)據(jù)是一個數(shù)值類型,可以參與簡單的加、減運算;每種日期類型都有取值范圍,當(dāng)插入不合法的值時,系統(tǒng)會將“0”插入該字段?!?.3數(shù)據(jù)類型5.3.3字符串類型MySQL支持2種字符串類型:文本字符串和二進(jìn)制字符串。字符串類型指的是CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。字符串類型的數(shù)據(jù)又可以分為普通的文本字符串類型(CHAR和VARCHAR)、可變類型(TEXT和BLOB)和特殊類型(SET和ENUM)VARCHAR和TEXT類型是變長類型,它們的存儲需求取決于值的實際長度,而不是取決于類型的最大可能程度。例如。一個VARCHAR(10)字段能保存最大長度為10個字符的一個字符串,實際的存儲需求是字符串的長度加上1個字節(jié)來記錄字符串的長度。例如,字符串’welcome’,字符個數(shù)是7而存儲需求是8個字節(jié)。§5.3數(shù)據(jù)類型5.3.3字符串類型字符串類型大小用途字符串類型大小用途CHAR0~255B定長字符串VARCHAR0~255B變長字符串TINYBLOB0~255B不超過255個字符的二進(jìn)制字符串YINYTEXT0~255B短文本字符串BLOB0~65535B二進(jìn)制的長文本數(shù)據(jù)TEXT0~65535B長文本數(shù)據(jù)MEDIUMBLOB0~16777215B二進(jìn)制形式的中等長度文本數(shù)據(jù)MEDIUMTEXT0~16777215B中等長度文本數(shù)據(jù)LONGBLOB0~4294967295B二進(jìn)制形式的極大文本數(shù)據(jù)LONGTEXT0~4294967295B極大文本數(shù)據(jù)§5.3數(shù)據(jù)類型5.3.3字符串類型(1)CHAR和VARCHAR類型CHAR(M)為固定長度字符串,M表示該字段中存儲的字符串長度,取值范圍在0~255,輸入的字符串長度不足M時,右側(cè)用空格填滿,當(dāng)查詢到CHAR的值時,尾部的空格被刪除。VARCHAR(M)為長度可變的字符串,M表示最大的字符串長度,取值范圍在0~65535,VARCHAR的最大實際長度由最長字段的大小和使用的字符集確定。例如:VARCHAR(50)定義一個最長為50的字符串,如果輸入的字符串只有20個字符,那么實際存儲的字符串的長度為21,20個字符+一個字符串結(jié)束符。VARCHAR在值存儲和查詢時尾部的空格仍保留。§5.3數(shù)據(jù)類型5.3.3字符串類型(2)TEXT類型TEXT字段保存非二進(jìn)制字符串,如文章內(nèi)容、評論、留言等,當(dāng)保存或查詢TEXT字段值時,不刪除尾部空格。TEXT類型分為4種:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。不同的TEXT類型所需的存儲空間和數(shù)據(jù)長度都有所不同?!?.3數(shù)據(jù)類型5.3.4二進(jìn)制類型MySQL支持7種二進(jìn)制類型:BINARY、VARBINARY、BIT、TINYBLOB、BLOB、MEDIUBLOB、LONGBLOB。二進(jìn)制類型的主要用于存儲由‘0’、‘1’組成的字符串,從某種意義上講,二進(jìn)制類型的數(shù)據(jù)是一種特殊格式的字符串。二進(jìn)制類型與字符型的區(qū)別在于,字符串類型的數(shù)據(jù)按字符為單位進(jìn)行存儲,因此有多種字符集和多種字符序;除了BIT數(shù)據(jù)類型按位為單位進(jìn)行存儲,其他二進(jìn)制類型的數(shù)據(jù)都是按字節(jié)為單位存儲,僅存在二進(jìn)制字符集binary。§5.3數(shù)據(jù)類型5.3.5枚舉類型其中“字段名”指將要定義的字段名稱;“值n”指的是枚舉列表中的第n個值,枚舉列表中最多可以有65535個值,列表中的每個值的尾部空格自動被刪除。ENUM類型的字段在取值時,只能在指定的枚舉列表中取,而且只能取一個值。ENUM值在計算機(jī)中用整數(shù)表示,每個枚舉列表中的值都有一個索引值,列表值從1開始。ENUM值依照索引順序排列,空字符串排在非空字符串之前,NULL值排在其他所有枚舉值之前。如果ENUM類型的字段聲明為允許NULL,NULL則為該字段的有效值,也是默認(rèn)值;否則默認(rèn)值為枚舉列表中的第1個值。ENUM是一種字符串類型,創(chuàng)建表時,通過枚舉方式(一個個的值列出來)為字段顯式指定枚舉列表。語法格式:字段名ENUM(‘值1’,’值2’,…,’值n’)§5.3數(shù)據(jù)類型5.3.5枚舉類型【例5.12】使用CREATE語句創(chuàng)建一張加班記錄表tbl_work_overtime包含INT類型的序號id、CHAR(4)類型的職工編號employee_id、ENUM類型的周幾weekday三個字段。weekday字段沒有設(shè)置默認(rèn)值,允許為NULL。

CREATETABLEtbl_work_overtime1(idINT,employee_idCHAR(4),weekdayENUM('monday','tuesday','wednesday','thursday','friday','saturday','sunday'));首先,創(chuàng)建表允許為空§5.3數(shù)據(jù)類型5.3.5枚舉類型【例5.12】使用CREATE語句創(chuàng)建一張加班記錄表tbl_work_overtime包含INT類型的序號id、CHAR(4)類型的職工編號employee_id、ENUM類型的周幾weekday三個字段。weekday字段沒有設(shè)置默認(rèn)值,允許為NULL。

INSERTINTOtbl_work_overtime1(id,employee_id)VALUES(1,'1001');INSERTINTOtbl_work_overtime1VALUES(2,'1002','sunday'),(3,'1003','wednesday');其次,插入數(shù)據(jù)§5.3數(shù)據(jù)類型5.3.5枚舉類型【例5.12】使用CREATE語句創(chuàng)建一張加班記錄表tbl_work_overtime包含INT類型的序號id、CHAR(4)類型的職工編號employee_id、ENUM類型的周幾weekday三個字段。weekday字段沒有設(shè)置默認(rèn)值,允許為NULL。

SELECT*FROMtbl_work_overtime1;最后,查看記錄內(nèi)容§5.3數(shù)據(jù)類型5.3.5枚舉類型【例5.13】使用CREATE語句創(chuàng)建一張加班記錄表tbl_work_overtime2包含INT類型的序號id、CHAR(4)類型的職工編號employee_id、ENUM類型的周幾weekday三個字段。并為weekday字段設(shè)置默認(rèn)值'saturday'。

CREATETABLEtbl_work_overtime2(idINT,employee_idCHAR(4),weekdayENUM('monday','tuesday','wednesday','thursday','friday','saturday','sunday')DEFAULT'saturday');首先,創(chuàng)建表設(shè)置默認(rèn)值§5.3數(shù)據(jù)類型5.3.5枚舉類型INSERTINTOtbl_work_overtime2(id,employee_id)VALUES(1,'1001');INSERTINTOtbl_work_overtime2VALUES(2,'1002','sunday'),(3,'1003','wednesday');其次,插入數(shù)據(jù)

SELECT*FROMtbl_work_overtime2;最后,查看記錄內(nèi)容§5.3數(shù)據(jù)類型5.3.5枚舉類型【例5.14】使用CREATE語句創(chuàng)建一張加班記錄表tbl_work_overtime3包含INT類型的序號id、CHAR(4)類型的職工編號employee_id、ENUM類型的周幾weekday三個字段。并為weekday字段設(shè)置NOTNULL。

CREATETABLEtbl_work_overtime3(idINT,employee_idCHAR(4),weekdayENUM('monday','tuesday','wednesday','thursday','friday','saturday','sunday')NOTNULL);首先,創(chuàng)建表設(shè)置NOTNULL、沒有默認(rèn)值§5.3數(shù)據(jù)類型5.3.5枚舉類型INSERTINTOtbl_work_overtime3(id,employee_id)VALUES(1,'1001');INSERTINTOtbl_work_overtime3VALUES(2,'1002','sunday'),(3,'1003','wednesday');其次,插入數(shù)據(jù)

SELECT*FROMtbl_work_overtime3;最后,查看記錄內(nèi)容§5.3數(shù)據(jù)類型枚舉類型的字段不允許為NULL、沒有設(shè)置默認(rèn)值,如果插入數(shù)據(jù)時省略,則取枚舉類型定義的第一個值。5.3.6集合類型SET類型也屬于字符串類型,在創(chuàng)建表的時候,通過列舉方式(一個個的值列出來)為字段顯式指定集合列表。語法格式:字段名SET(‘值1’,’值2’,…,’值n’)§5.3數(shù)據(jù)類型5.3.6集合類型與ENUM類型相同的是:SET值在內(nèi)部用整數(shù)表示,列表中每個值都有一個索引編號。創(chuàng)建表時,SET成員的尾部空格被自動刪除。與ENUM類型不同的是:ENUM類型的字段只能在指定的枚舉列表中選擇一個值;而SET類型的字段可以從定義的列表中選擇多個值。如果插入SET字段中的值有重復(fù),則MySQL自動刪除多余的重復(fù)值;插入SET字段的值的順序不重要,系統(tǒng)在存入數(shù)據(jù)庫時會按照SET定義的順序存儲和顯示;如果插入非法數(shù)據(jù)則被忽視,并給出警告。枚舉類型與集合類型的比較:§5.3數(shù)據(jù)類型5.3.6集合類型【例5.15】使用CREATE語句創(chuàng)建一張學(xué)生興趣愛好的表tbl_hobbies包含CHAR(10)類型的學(xué)號stud_id、VARCHAR(10)類型的姓名name、SET類型的興趣愛好hobby三個字段。其中興趣愛好包括:音樂、唱歌、跳遠(yuǎn)、跳高、乒乓球、籃球、攝影、素描。

CREATETABLEtbl_hobbies(stud_idCHAR(10),nameVARCHAR(10),hobbySET('音樂','唱歌','跳遠(yuǎn)','跳高','乒乓球','籃球','攝影','素描'));首先,創(chuàng)建表§5.3數(shù)據(jù)類型5.3.6集合類型INSERTINTOtbl_hobbies(stud_id,name)VALUES('2021010566','楊欣悅');INSERTINTOtbl_hobbies(stud_id,name,hobby)VALUES('2021010567','孫穆晨','攝影,唱歌'),('2021010567','鄭澤龍','籃球,乒乓球,攝影');其次,插入數(shù)據(jù)

SELECT*FROMtbl_hobbies;最后,查看記錄內(nèi)容§5.3數(shù)據(jù)類型5.3.6集合類型枚舉類型與集合類型的比較:ENUM類型的字段只允許從一個集合中取一個值,類似于單選按鈕。例如,性別只能從|‘男’,‘女’|中取一個值。SET類型的字段允許從一個集合中取多個值,類似于復(fù)選框。例如,興趣愛好可以從|‘購物’,‘旅游’,‘游泳’,‘唱歌’,‘運動’|中取多個值。一個SET類型的數(shù)據(jù)最多可以包含64個元素;一個ENUM類型的數(shù)據(jù)最多可以包含65535個元素?!?.3數(shù)據(jù)類型運算符是用來連接表達(dá)式中各個操作數(shù)據(jù)的符號。用來指明對操作數(shù)據(jù)所進(jìn)行的運算。MySQL支持算術(shù)運算符、比較運算符、邏輯運算符和位運算符四種類型。5.4.1

算術(shù)運算符運算符作用+加法,返回相加后的值-減法,返回相減后的值*乘法,返回相乘后的值/,DIV取整,返回相除后的商%,MOD求余,返回相除后的余數(shù)§5.4運算符【例5.16】在MySQL中使用SELECT可以顯示表達(dá)式的值。

SELECT5+2,5-2,5*2,5/2,5DIV2,5/0,5%2,5MOD2,5MOD0;5.4.1

算術(shù)運算符§5.4運算符5.4.2比較運算符運算符作用運算符作用=、<、<=、>、>=等于、小于、小于等于、大于、大于等于IN(value1,value2,…)存在于集合(value1,value2,…)中<>或!=不等于ISNULL為NULL<=>當(dāng)兩個操作數(shù)都為NULL時返回1IS

NOT

NULL不為NULLBETWEENminANDmax判斷操作數(shù)在min和max之間REGEXP或RLIKE正則表達(dá)式匹配LIKE通配符匹配。“%”匹配任意數(shù)目的字符,包括零字符,“_”只匹配一個字符比較運算符有很多,比較結(jié)果為真返回1,為假返回0為NULL?!?.4運算符5.4.2比較運算符數(shù)值比較時的規(guī)則(1)若有一個或兩個參數(shù)為NULL,則比較運算符的結(jié)果為NULL。(2)若同一個比較運算符中的兩個參數(shù)都是字符串,則按照字符串進(jìn)行比較(不區(qū)分大小寫)。(3)若兩個參數(shù)均為整數(shù),則按照整數(shù)進(jìn)行比較。(4)若兩個參數(shù)均為數(shù)字,則按浮點數(shù)進(jìn)行比較。(5)若一個字符串和一個數(shù)字進(jìn)行相等比判斷,則MySQL可以自動將字符串轉(zhuǎn)換為數(shù)字,然后按數(shù)字進(jìn)行比較?!?.4運算符【例5.17】使用比較運算符進(jìn)行比較運算。

SELECT1=0,'2'=2,1+5=3+3,'ab'='ad',5=NULL,NULL=NULL,NULL<=>NULL;5.4.2比較運算符----比較大小運算符§5.4運算符【例5.18】使用BETWEENAND和NOTBETWEENAND進(jìn)行區(qū)間判斷。SELECT6BETWEEN1AND6,6BETWEEN10+5AND1,'f'BETWEEN'a'AND'z',16BETWEEN1AND10,16NOTBETWEEN1AND10;5.4.2比較運算符----[NOT]BETWEENAND運算符語法格式:表達(dá)式

[NOT]BETWEENminANDmax§5.4運算符【例5.19】使用LEAST和GREATEST運算符求最值。

SELECTLEAST(5,12),LEAST('ab','abc'),LEAST(10,NULL),GREATEST(5,12,8),GREATEST(10,NULL);5.4.2比較運算符----LEAST和GREATEST運算符語法格式:LEAST|GREATEST(值1,值2,…,值n)§5.4運算符【例5.20】使用ISNULL(ISNULL)和ISNOTNULL判斷NULL值和非NULL值。

SELECTNULLISNULL,ISNULL(NULL),ISNULL(1),1ISNULL,1ISNOTNULL,NULLISNOTNULL;5.4.2比較運算符----IS[NOT]NULL(ISNULL)運算符語法格式:表達(dá)式

IS[NOT]NULL§5.4運算符【例5.21】使用IN和NOTIN進(jìn)行判斷。

SELECT5IN(1,5,'sql'),'sql'NOTIN(1,2,'sql'),NULLIN(1,5,'sql'),NULLIN(1,5,NULL),NULLNOTIN(1,5,NULL);5.4.2比較運算符----IN和NOTIN運算符語法格式:表達(dá)式

[NOT]IN(值1,值2,…,值n)§5.4運算符?'%',可以匹配任意n個字符,n>=0;?'_',只能匹配一個字符;

SELECT'lucky'LIKE'l%','lucky'LIKE'%y','lucky'LIKE'l_cky','lucky_lily'LIKE'lucky/_%'ESCAPE'/','luckylily'LIKE'lucky/_%'ESCAPE'/';5.4.2比較運算符----LIKE運算符語法格式:表達(dá)式

LIKE匹配條件通配符:【例5.22】使用LIKE運算符進(jìn)行字符匹配?!?.4運算符5.4.3邏輯運算符運算符作用NOT或!邏輯非AND或&邏輯與OR或||邏輯或XOR邏輯異或邏輯運算也成為布爾運算,在SQL中,所有邏輯表達(dá)式的結(jié)果均為TRUE或FALSE或NULL,在MySQL中分別顯示為1、0、NULL?!?.4運算符5.4.3.邏輯運算符(1)NOT或者?。罕硎井?dāng)操作數(shù)為零時,返回值為1,當(dāng)操作數(shù)為1時,返回值為0,當(dāng)操作數(shù)為NULL時,返回值為NULL。(2)AND或者&:表示當(dāng)所有操作數(shù)均為非零值,并且不為NULL時,返回值為1,當(dāng)一個或多個操作數(shù)為零時,返回值為0,其余情況返回值為NULL。(3)OR或者||:表示當(dāng)兩個操作數(shù)均不為NULL,且任意一個操作數(shù)為非零,使結(jié)果為1,否則結(jié)果為0。當(dāng)有一個操作數(shù)為NULL,且另一個操作數(shù)為非零值,則結(jié)果為1,否則結(jié)果為NULL;當(dāng)兩個操作數(shù)均為NULL時,則所得結(jié)果為NULL。(4)XOR:當(dāng)任意一個操作數(shù)為NULL時,返回值為NULL,對于非NULL的操作數(shù),如果兩個操作數(shù)都是非0值或者都是0值,則返回值結(jié)果為0,如果一個為0,另一個為非0值,返回值結(jié)果為1?!?.4運算符【例5.23】使用邏輯非運算符進(jìn)行邏輯運算。

SELECTNOT0,NOT10,!0,!0,!-10,NOT10+1,!10+1,!0+1,NOTNULL,!NULL;5.4.3.邏輯運算符§5.4運算符【例5.24】使用AND、OR、XOR進(jìn)行邏輯運算。

SELECT10AND-8,0AND10,0ANDNULL,10ANDNULL,10OR0,10ORNULL,0ORNULL,10XOR0,10XORNULL;5.4.3.邏輯運算符§5.4運算符在創(chuàng)建完數(shù)據(jù)庫之后,接下來就要在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。所謂創(chuàng)建數(shù)據(jù)表,指的是在已經(jīng)創(chuàng)建好的數(shù)據(jù)庫中建立新表。創(chuàng)建數(shù)據(jù)表的過程是規(guī)定數(shù)據(jù)列的屬性的過程,同時也是實施數(shù)據(jù)完整性(實體完整性、參照完整性和用戶定義完整性)約束的過程。數(shù)據(jù)表屬于數(shù)據(jù)庫,在創(chuàng)建數(shù)據(jù)表之前,要使用“USE數(shù)據(jù)庫名”指定操作是在哪個數(shù)據(jù)庫中進(jìn)行,如果沒有選擇具體的數(shù)據(jù)庫直接建表,系統(tǒng)會顯示錯誤信息:“Nodatabaseselected”5.5.1創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)語句§5.5表結(jié)構(gòu)的創(chuàng)建CREATETABLE[IFNOTEXISTS]表名(字段名1數(shù)據(jù)類型[列級別約束條件][默認(rèn)值],字段名2數(shù)據(jù)類型[列級別約束條件][默認(rèn)值],……[表級別約束條件]);5.5.1創(chuàng)建表結(jié)構(gòu)語句語法格式:§5.5表結(jié)構(gòu)的創(chuàng)建數(shù)據(jù)表屬于數(shù)據(jù)庫,在創(chuàng)建數(shù)據(jù)表之前,要使用“USE數(shù)據(jù)庫名”指定操作是在哪個數(shù)據(jù)庫中進(jìn)行,如果沒有選擇具體的數(shù)據(jù)庫直接建表,系統(tǒng)會顯示錯誤信息:“Nodatabaseselected”1)

IFNOTEXISTS:如果數(shù)據(jù)庫中已經(jīng)存在表名的表,再來使用CREATETABLE創(chuàng)建一個同名的表時,系統(tǒng)會給出錯誤信息,為了避免系統(tǒng)給出錯誤信息的提示,可以在創(chuàng)建表的前面加上這個判斷,只有該表目前不存在時才執(zhí)行CREATETABLE操作。2)表名和字段名要符合MySQL的命名規(guī)則,不區(qū)分大小寫,不能使用MySQL中的關(guān)鍵字,如ALTER、CREATE、TABLE、DROP等;3)語法格式中“[]”表示可選項;4)創(chuàng)建表時,必須定義表的每一個字段的名稱和數(shù)據(jù)類型,如果包含多個字段,要用逗號隔開,但最后的右側(cè)小括號的前面不能有逗號?!?.5表結(jié)構(gòu)的創(chuàng)建字段名數(shù)據(jù)類型[NOTNULL|NULL][DEFAULT默認(rèn)值][AUTO_INCREMENT][UNIQUE|KEY][[PRIMARY]KEY][COMMENT注釋名稱][REFERENCE外鍵][INDEX索引名][CHARSET字符集][COLLATE校驗規(guī)則]5)字段的定義包括指定字段名、數(shù)據(jù)類型以及約束條件。約束條件包括:是否允許空值,指定默認(rèn)值、主鍵約束、唯一性約束、注釋字段名、是否為外鍵以及字段類型的屬性等。5.5.1創(chuàng)建表結(jié)構(gòu)語句§5.5表結(jié)構(gòu)的創(chuàng)建1)NOTNULL或NULL,表示字段是否可以為NULL值,NULL不同于零、空白或長度為零的字符串,NULL值意味著此值是未知的或不可用的。2)DEFAULT,用來指定字段的默認(rèn)值;3)AUTO_INCREMENT,設(shè)置自增屬性,只有整數(shù)類型才能設(shè)置該屬性;4)UNIQUEKEY,對字段指定唯一性約束,該字段不能有重復(fù)值,但可以有一個NULL值。5)PRIMARYKEY,對字段指定主鍵約束,該字段不能有重復(fù)值,也不能為NULL。6)COMMENT,對字段指定注釋名稱,即給字段起一個別名。7)REFERENCE,指定外鍵約束;8)INDEX,為表的相關(guān)字段設(shè)置索引。5.5.1創(chuàng)建數(shù)據(jù)表NULL不同于零、空白或長度為零的字符串,NULL值意味著此值是未知的或不可用的?!?.5表結(jié)構(gòu)的創(chuàng)建MySQL支持的常用約束條件有6種:主鍵約束(PRIMARYKEY)、外鍵約束(FOREIGNKEY)、非空約束(NOTNULL)、唯一性約束(UNIQUE)、默認(rèn)值約束(DEFAULT)和自增約束(AUTO_INCREMENT)。

1)實體完整性:保證表中每條記錄都是可以識別和唯一的。參照完整性:? 不能在相關(guān)表中的外鍵字段中輸入不存在于主表中的主鍵中的值。? 如果在相關(guān)表中存在匹配記錄,則不能在主表中刪除該記錄,也不能修改其主鍵的值。用戶定義完整性:用戶指明表中的字段的取值范圍。5.5.2數(shù)據(jù)完整性約束§5.5表結(jié)構(gòu)的創(chuàng)建5.5.3使用主鍵約束----單字段主鍵方式一的語法格式:字段名數(shù)據(jù)類型[CONSTRAINT約束名]PRIMARYKEY【例5.25】在online_sales_system數(shù)據(jù)庫中,根據(jù)下面表的表結(jié)構(gòu)創(chuàng)建商品表items。方式二的語法格式:[CONSTRAINT約束名]

PRIMARYKEY(字段名1[,字段名2,…])§5.5表結(jié)構(gòu)的創(chuàng)建首先使用USE語句將online_sales_system數(shù)據(jù)庫設(shè)置為當(dāng)前數(shù)據(jù)庫。USEonline_sales_system;

字段名說明數(shù)據(jù)類型是否允許NULL主鍵item_id商品編號char(4)NOTNULL是item_name商品名稱varchar(45)NOTNULL

category類別varchar(10)

cost成本價格decimal(10,2)

price銷售價格decimal(10,2)inventory庫存intIs_online是否上架tinyintitems(商品表)的結(jié)構(gòu)5.5.3使用主鍵約束----單字段主鍵§5.5表結(jié)構(gòu)的創(chuàng)建5.5.3使用主鍵約束----單字段主鍵CREATETABLEIFNOTEXISTSitems1(item_idCHAR(4),item_nameVARCHAR(45),categoryVARCHAR(10),costDECIMAL(10,2),priceDECIMAL(10,2),inventoryINT,is_onlineTINYINT,PRIMARYKEY(item_id));CREATETABLEIFNOTEXISTSitems(item_idCHAR(4)PRIMARYKEY,item_nameVARCHAR(45),categoryVARCHAR(10),costDECIMAL(10,2),priceDECIMAL(10,2),inventoryINT,is_onlineTINYINT);沒有逗號列級約束表級約束§5.5表結(jié)構(gòu)的創(chuàng)建5.5.3使用主鍵約束----多字段主鍵【例5.26】在online_sales_system數(shù)據(jù)庫中,根據(jù)下面表的表結(jié)構(gòu)創(chuàng)建訂單明細(xì)表order_details表。字段名說明數(shù)據(jù)類型是否允許NULL主鍵order_id訂單編號intNOTNULL是item_id商品編號char(4)NOTNULL

是quantity數(shù)量int

discount折扣decimal(5,2)

訂單明細(xì)表order_details的表結(jié)構(gòu)§5.5表結(jié)構(gòu)的創(chuàng)建5.5.3使用主鍵約束----多字段主鍵CREATETABLEIFNOTEXISTSorder_details(order_idINT,item_idCHAR(4),quantityINT,discountDECIMAL(5,2),

CONSTRAINT

ord_item

PRIMARYKEY(order_id,item_id));沒有逗號由多個字段聯(lián)合作為表的主鍵,則只能使用表級約束設(shè)置主鍵。§5.5表結(jié)構(gòu)的創(chuàng)建5.5.4使用非NULL約束語法格式:字段名數(shù)據(jù)類型NOTNULL【例5.27】在online_sales_system數(shù)據(jù)庫中,根據(jù)下表的表結(jié)構(gòu)創(chuàng)建訂單表orders。§5.5表結(jié)構(gòu)的創(chuàng)建字段名說明數(shù)據(jù)類型是否允許NULL主鍵order_id訂單編號intNOTNULL是customer_id客戶編號char(3)NOTNULL

address配送地址varchar(45)

city城市varchar(10)

order_date訂單時間datetimeShipping_date發(fā)貨時間datetimeorders表的結(jié)構(gòu)5.5.4使用非NULL約束語法格式:字段名數(shù)據(jù)類型NOTNULL【例5.27】在online_sales_system數(shù)據(jù)庫中,根據(jù)下表的表結(jié)構(gòu)創(chuàng)建訂單表orders。CREATETABLEIFNOTEXISTSorders(order_idINTNOTNULL,customer_idCHAR(3)NOTNULL,addressVARCHAR(45),cityVARCHAR(10),

order_dateDATETIME,shipping_dateDATETIME,

PRIMARYKEY(order_id));沒有逗號§5.5表結(jié)構(gòu)的創(chuàng)建沒有使用非NULL約束的字段可以取NULL值5.5.5使用默認(rèn)約束語法格式:字段名數(shù)據(jù)類型DEFAULT默認(rèn)值【例5.28】在online_sales_system數(shù)據(jù)庫中,根據(jù)下頁表的表結(jié)構(gòu)創(chuàng)建客戶表customers?!?.5表結(jié)構(gòu)的創(chuàng)建字段名說明數(shù)據(jù)類型是否允許NULL主鍵默認(rèn)值customer_id客戶編號char(3)NOTNULL是name姓名varchar(20)NOTNULL

gender性別ENUM('男','女')

'男'registration_date注冊時間datephone聯(lián)系電話char(11)customers表的結(jié)構(gòu)5.5.5使用默認(rèn)約束語法格式:字段名數(shù)據(jù)類型DEFAULT默認(rèn)值【例5.28】在online_sales_system數(shù)據(jù)庫中,根據(jù)下頁表的表結(jié)構(gòu)創(chuàng)建客戶表customers。CREATETABLEIFNOTEXISTScustomers(customer_idCHAR(3)NOTNULL,nameVARCHAR(20)NOTNULL,genderENUM('男','女')DEFAULT'男',registration_dateDATE,phoneCHAR(11),PRIMARYKEY(customer_id));沒有逗號§5.5表結(jié)構(gòu)的創(chuàng)建5.5.6使用唯一性約束----列級約束語法格式:字段名數(shù)據(jù)類型UNIQUE【例5.29】定義商品表items2,設(shè)置商品的名稱item_name唯一。CREATETABLEIFNOTEXISTSitems2(item_idCHAR(4)PRIMARYKEYNOTNULL,item_nameVARCHAR(45)UNIQUE,categoryVARCHAR(10),costDECIMAL(10,2),priceDECIMAL(10,2),inventoryINT,is_onlineTINYINT);列級約束§5.5表結(jié)構(gòu)的創(chuàng)建5.5.6使用唯一性約束----表級約束語法格式:[CONSTRAINT約束名]UNIQUE(字段名)【例5.30】定義商品表items3,使用表級約束設(shè)置商品的名稱item_name唯一。CREATETABLEIFNOTEXISTSitems3(item_idCHAR(4)PRIMARYKEYNOTNULL,item_nameVARCHAR(45),categoryVARCHAR(10),costDECIMAL(10,2),priceDECIMAL(10,2),inventoryINT,is_onlineTINYINT,CONSTRAINTuniq_nameUNIQUE(item_name));表級約束§5.5表結(jié)構(gòu)的創(chuàng)建5.5.6使用唯一性約束一個表中只能有一個PRIMARYKEY聲明,即一個表只能有一個主鍵,主鍵的值不能重復(fù),也不允許有NULL值;一個表中可以有多個字段設(shè)置為唯一性約束UNIQUE,設(shè)置了唯一性約束的字段值不能重復(fù),但允許有一個NULL值。UNIQUE和PRIMARYKEY的區(qū)別:§5.5表結(jié)構(gòu)的創(chuàng)建5.5.7使用自增約束語法格式:字段名稱數(shù)據(jù)類型AUTO_INCREMENT【例5.31】定義訂單表orders2,將訂單編號order_id設(shè)置為自增屬性。CREATETABLEIFNOTEXISTSorders2(order_idINTPRIMARYKEYAUTO_INCREMENT,customer_idCHAR(3)NOTNULL,addressVARCHAR(45),cityVARCHAR(10),order_dateDATETIME,shipping_dateDATETIME);列級約束§5.5表結(jié)構(gòu)的創(chuàng)建表orders2創(chuàng)建好之后,使用INSERTINTO語句插入3條記錄。SELECT*FROMorders2;§5.5表結(jié)構(gòu)的創(chuàng)建5.5.7使用自增約束主表必須已經(jīng)存在,或者是當(dāng)前正在創(chuàng)建的表。主表必須定義主鍵,并且從表中外鍵字段的數(shù)目必須和主表的主鍵字段的數(shù)目相同。主表中主鍵不能包含空值,但從表中的外鍵允許出現(xiàn)空值。從表的外鍵必須關(guān)聯(lián)主表的主鍵,并且關(guān)聯(lián)字段的數(shù)據(jù)類型必須匹配(相同或者相容),使用的字符集和檢驗規(guī)則也要求相同,否則無法創(chuàng)建外鍵約束,系統(tǒng)會給出錯誤提示信息。外鍵的作用是保持?jǐn)?shù)據(jù)表之間數(shù)據(jù)的一致性和完整性。5.5.8使用外鍵約束主(父)表:一方的表;從(子)表:多方的表;關(guān)聯(lián)字段主鍵外鍵§5.5表結(jié)構(gòu)的創(chuàng)建語法格式:[CONSTRAINT外鍵名]FOREIGNKEY(從表的字段列表)REFERENCES主表名稱(主鍵列表)5.5.8使用外鍵約束CONSTRAINT外鍵名:可選項,設(shè)置外鍵約束的名稱,一個表中不能有相同名稱的外鍵約束;主表必須定義主鍵,并且從表種外鍵字段的數(shù)目必須和主表的主鍵字段的數(shù)目相同。從表的字段名列表:需要設(shè)置外鍵約束的字段列表;主表名稱:被從表外鍵依賴的主表的名稱;主鍵列表:主表中定義的主鍵字段(和從表的外鍵相關(guān)聯(lián)的主表的主鍵名稱)?!?.5表結(jié)構(gòu)的創(chuàng)建【例5.32】在創(chuàng)建訂單表orders時,設(shè)置外鍵約束ky_ord_cust,使得訂單表orders中的字段customer_id與客戶表customers中的主鍵customer_id關(guān)聯(lián)。

DROPTABLEIFEXISTSorders;CREATETABLEorders(order_idINTPRIMARYKEY,customer_idCHAR(3)NOTNULL,

addressVARCHAR(45),cityVARCHAR(10),order_dateDATETIME,shipping_dateDATETIME,CONSTRAINTky_ord_custFOREIGNKEY(customer_id)REFERENCEScustomers(customer_id));5.5.8使用外鍵約束如果訂單表orders已存在,則執(zhí)行刪除訂單表,否則不執(zhí)行刪除操作?!?.5表結(jié)構(gòu)的創(chuàng)建5.5.9存儲引擎、字符集和校驗規(guī)則的設(shè)置ENGINE=存儲引擎類型DEFAULTCHARSET=字符集類型COLLATE=校驗規(guī)則字段名數(shù)據(jù)類型[CHARSET字符集類型][COLLATE校驗規(guī)則]1.對整個表設(shè)置存儲引擎、字符集和校驗規(guī)則,語法格式如下:2.在字段定義部分添加字符集和校驗規(guī)則,語法格式如下:§5.5表結(jié)構(gòu)的創(chuàng)建【例5.33】創(chuàng)建訂單表orders2,并為orders2表設(shè)置存儲引擎為InnoDB、字符集為utf8mb4和校驗規(guī)則為utf8mb4_0900_ai_ci。DROPTABLEIFEXISTSorders2;CREATETABLEorders2(order_idINTPRIMARYKEY,customer_idCHAR(3)NOTNULL,addressVARCHAR(45),cityVARCHAR(10),order_dateDATETIME,shipping_dateDATETIME)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ci;如果訂單表orders2已存在,則執(zhí)行刪除訂單表,否則不執(zhí)行刪除操作。5.5.9存儲引擎、字符集和校驗規(guī)則的設(shè)置§5.5表結(jié)構(gòu)的創(chuàng)建【例5.34】創(chuàng)建訂單表orders2,并為字段customer_id和address設(shè)置字符集gbk和校驗規(guī)則gbk_chinese_ci。DROPTABLEIFEXISTSorders2;CREATETABLEorders2(order_idINTPRIMARYKEY,customer_idCHAR(3)CHARSETgbkCOLLATEgbk_chinese_ciNOTNULL,addressVARCHAR(45)CHARSETgbkCOLLATEgbk_chinese_ci,cityVARCHAR(10),order_dateDATETIME,shipping_dateDATETIME);5.5.9存儲引擎、字符集和校驗規(guī)則的設(shè)置§5.5表結(jié)構(gòu)的創(chuàng)建使用語句SHOWCREATETABLEorders2\G查看的結(jié)果表信息如下:5.5.9存儲引擎、字符集和校驗規(guī)則的設(shè)置city字段使用的是系統(tǒng)的默認(rèn)值utf8mb4和utf8mb4_0900_ai_ci在同一個數(shù)據(jù)表中不同的字段可以使用不同的字符集和校驗規(guī)則§5.5表結(jié)構(gòu)的創(chuàng)建5.5.10創(chuàng)建表用到的約束條件總結(jié)1.列級完整性約束條件,語法格式如下:字段名數(shù)據(jù)類型[列級約束條件]1)PRIMARYKEY:設(shè)置該字段為主鍵。2)NULL/NOTNULL:設(shè)置的字段允許為空/不允許為空,如果沒有約束條件,則默認(rèn)為NULL。3)UNIQUE:設(shè)置字段取值唯一,即每條記錄的指定字段的值不能重復(fù)。4)DEFAULT

默認(rèn)值:設(shè)置字段的默認(rèn)值。5)AUTO_INCREMENT:設(shè)置字段的值自動增加。6)CHARSET:設(shè)置字段使用的字符集。7)COLLATE:設(shè)置字段使用的校驗規(guī)則?!?.5表結(jié)構(gòu)的創(chuàng)建5.5.10創(chuàng)建表用到的約束條件總結(jié)2.表級完整性約束條件如下:1)PRIMARYKEY用于定義表級主鍵約束,語法格式如下:[CONSTRAINT約束名]PRIMARYKEY(字段名1,字段名2,…,字段名n)2)FOREIGNKEY用于設(shè)置參照完整性規(guī)則,即指定某字段為外鍵,語法格式如下:[CONSTRAINT約束名]FOREIGNKEY(外鍵)REFERENCES被參照表(主鍵)3)UNIQUE既可用于列級完整性約束,也可用于表級完整性約束,語法格式如下:[CONSTRAINT約束名]UNIQUE(字段名)4)存儲引擎的設(shè)置,語法格式如下:ENGINE=存儲引擎類型5)字符集和校驗規(guī)則的設(shè)置:DEFAULTCHARSET=字符集類型COLLATE=校驗規(guī)則§5.5表結(jié)構(gòu)的創(chuàng)建使用MySQL語句創(chuàng)建好數(shù)據(jù)表之后,可以用SHOWTABLES語句顯示數(shù)據(jù)庫中所有的數(shù)據(jù)表的名稱;(前面介紹過了)也可以查看表的結(jié)構(gòu),以確定表的定義是否正確,查看表結(jié)構(gòu)可以使用DESCRIBE

和SHOWCREATETABLE語句。5.5.11查看表的結(jié)構(gòu)§5.5表結(jié)構(gòu)的創(chuàng)建5.5.11查看表的結(jié)構(gòu)1.使用DESCRIBE查看表結(jié)構(gòu)。語法格式如下:

DESCRIBE表名;

【例5.35】查看客戶表customers的表結(jié)構(gòu)。§5.5表結(jié)構(gòu)的創(chuàng)建DESC表名;

等價于5.5.11查看表的結(jié)構(gòu)2.

使用SHOWCREATETABLE語句查看表結(jié)構(gòu)。語法格式如下:SHOWCREATETABLE表名\G【例5.36】使用SHOWCREATETABLE語句查看客戶表customers的表結(jié)構(gòu)。SHOWCREATETABLEcustomers\G§5.5表結(jié)構(gòu)的創(chuàng)建\G和;基本等價,在使用SHOWCREATETABLE語句時,使用\G的顯示格式要比;更簡介修改表指的是修改數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)。修改表的操作包括:修改表名、修改字段數(shù)據(jù)類型或字段名、增加和刪除字段、修改字段的排列位置、更改表的存儲引擎、刪除表的外鍵約束等。MySQL使用ALTERTABLE語句。在修改表結(jié)構(gòu)時可以使用DESC語句查看修改是否成功。§5.6數(shù)據(jù)表的修改ALTERTABLE表名{[ADD新字段名

數(shù)據(jù)類型[列級完整性約束條件][FIRST|AFTER已存在字段名]]|[MODIFY字段名1新數(shù)據(jù)類型[列級完整性約束條件][FIRST|AFTER字段名2]]|[CHANGE舊字段名

新字段名

新數(shù)據(jù)類型]|[DROP字段名|完整性約束名]|[RENAME[TO]新表名]|[ENGINE=更改后的存儲引擎名]};為指定的表添加一個新字段對指定表中字段的數(shù)據(jù)類型或完整性約束條件進(jìn)行修改對指定表中的字段名進(jìn)行改名對指定表中不需要的字段或完整性約束進(jìn)行刪除對指定表的表名進(jìn)行重命名對指定表的存儲引擎進(jìn)行修改有數(shù)據(jù)類型的都不能省§5.6數(shù)據(jù)表的修改5.6.1修改數(shù)據(jù)表的名稱ALTERTABLE舊表名

RENAME[TO]新表名;【例5.37】將客戶表customers改名為cust1。ALTERTABLEcustomersRENAMETOcust1;§5.6數(shù)據(jù)表的修改ALTERTABLE表名

MODIFY字段名數(shù)據(jù)類型;5.6.2修改字段的數(shù)據(jù)類型【例5.38】修改數(shù)據(jù)表cust1中姓名name的長度改為VARCHAR(30)。ALTERTABLEcust1MODIFYnameVARCHAR(30);不同類型的數(shù)據(jù)在機(jī)器中存儲的方式及長度各不相同,修改數(shù)據(jù)類型可能會影響到數(shù)據(jù)表中已有的數(shù)據(jù)記錄。由原來的VARCHAR(20)修改為VARCHAR(30)§5.6數(shù)據(jù)表的修改5.6.3修改字段名ALTERTABLE表名

CHANGE舊字段名新字段名新數(shù)據(jù)類型;【例5.39】把cust1表的name(姓名)字段名改為cname,類型改為varchar(20)。ALTERTABLEcust1CHANGEnamecnameVARCHAR(20);CHANGE也可以只修改數(shù)據(jù)類型,實現(xiàn)M

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論