




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第6章MySQL基礎(chǔ)(下)《PHP+MySQL動(dòng)態(tài)網(wǎng)站開發(fā)》學(xué)習(xí)目標(biāo)/Target
了解字符集的概念,能夠說出什么是字符集。
掌握字符集變量的使用方法,能夠通過字符集變量設(shè)置字符集。
了解校對集的概念,能夠說出什么是校對集。
掌握字符集和校對集的設(shè)置,能夠給數(shù)據(jù)庫、數(shù)據(jù)表和字段設(shè)置字符集和校對集。學(xué)習(xí)目標(biāo)/Target
熟悉數(shù)據(jù)類型,能夠區(qū)分在SQL語句中不同類型數(shù)據(jù)的表示方式。
掌握數(shù)據(jù)表的約束的使用方法,能夠在數(shù)據(jù)表中設(shè)置默認(rèn)值約束、非空約束、
唯一約束和主鍵約束。
掌握字段自動(dòng)增長的設(shè)置,能夠在創(chuàng)建數(shù)據(jù)表或修改數(shù)據(jù)表時(shí)為字段設(shè)置自動(dòng)增長。章節(jié)概述/Summary在數(shù)據(jù)庫中,數(shù)據(jù)表用來組織和存儲(chǔ)各種數(shù)據(jù),它是由表結(jié)構(gòu)和數(shù)據(jù)組成的。在設(shè)計(jì)表結(jié)構(gòu)時(shí),經(jīng)常需要根據(jù)實(shí)際需求,選擇合適的字符集、校對集和數(shù)據(jù)類型,為數(shù)據(jù)表添加約束,以及為主鍵字段設(shè)置自動(dòng)增長。本章將圍繞字符集和校對集、數(shù)據(jù)類型、數(shù)據(jù)表的約束以及自動(dòng)增長進(jìn)行詳細(xì)講解。目錄/Contents6.16.26.3字符集和校對集數(shù)據(jù)類型數(shù)據(jù)表的約束6.4自動(dòng)增長字符集和校對集6.1
先定一個(gè)小目標(biāo)!了解字符集的概念,能夠說出什么是字符集。6.1.1字符集概述字符編碼:計(jì)算機(jī)采用二進(jìn)制方式保存數(shù)據(jù),用戶輸入的字符會(huì)按照一定的規(guī)則轉(zhuǎn)換為二進(jìn)制后保存,這個(gè)轉(zhuǎn)換過程稱為字符編碼。字符集:將一系列的字符編碼規(guī)則組合起來就形成了字符集。MySQL中的字符集規(guī)定了字符在數(shù)據(jù)庫中的存儲(chǔ)格式,不同的字符集有不同的編碼規(guī)則。常用的字符集:UTF-8:支持世界上大多數(shù)國家的語言文字,通用性較強(qiáng),適用于大多數(shù)場合。MySQL中的寫法為utf8和utf8mb4,utf8中的單個(gè)字符最多占用3字節(jié),utf8mb4中的單個(gè)字符允許占用4字節(jié)。GBK:適合只需要支持英文、中文、日文和韓文的場合,MySQL中的寫法為gbk
。6.1.1字符集概述通過SHOWCHARACTERSET;語句可以查看MySQL可用的字符集:6.1.1字符集概述字符集名稱描述信息默認(rèn)校對集單個(gè)字符最大長度
先定一個(gè)小目標(biāo)!掌握校對集變量的使用方法,能夠通過字符集變量設(shè)置字符集。6.1.2字符集變量為了保障MySQL服務(wù)器端正確地識別客戶端的數(shù)據(jù),MySQL服務(wù)器端提供了與字符集相關(guān)的變量來記錄客戶端的字符集,用戶可以通過修改變量的值來設(shè)置字符集。6.1.2字符集變量使用SHOWVARIABLESLIKE'character%';語句可以查看MySQL中與字符集相關(guān)的變量:6.1.2字符集變量mysql>SHOWVARIABLESLIKE'character%';+----------------------------+-----------------------------------+|Variable_name
|Value
|+----------------------------+-----------------------------------+|character_set_client
|gbk
||character_set_connection|gbk
||character_set_database
|utf8mb4
||character_set_filesystem|binary
||character_set_results|gbk
||character_set_server
|utf8mb4
||character_set_system
|utf8mb3
||character_sets_dir|C:\web\mysql8.0\share\charsets\|+---------------------------+-------------------------------------+與字符集相關(guān)的變量:6.1.2字符集變量變量名說明character_set_client客戶端字符集character_set_connection客戶端與服務(wù)器連接使用的字符集character_set_database默認(rèn)數(shù)據(jù)庫使用的字符集(5.7.6版本開始不推薦使用)character_set_filesystem文件系統(tǒng)字符集character_set_results將查詢結(jié)果(如結(jié)果集或錯(cuò)誤信息)返回給客戶端的字符集character_set_server服務(wù)器默認(rèn)字符集character_set_system服務(wù)器用來存儲(chǔ)標(biāo)識符的字符集character_sets_dir安裝字符集的目錄使用SET變量名=值;語句更改字符集相關(guān)3個(gè)變量的值:SETcharacter_set_client=utf8mb4;SETcharacter_set_connection=utf8mb4;SETcharacter_set_results=utf8mb4;使用1條語句修改3個(gè)變量的值:SETNAMESutf8mb4;6.1.2字符集變量
先定一個(gè)小目標(biāo)!了解校對集的概念,能夠說出常用的校對集。6.1.3校對集概述校對集:用于為不同字符集指定比較和排序規(guī)則,并且校對集依賴于字符集。MySQL8.0.27版本的默認(rèn)校對集:Unicode校對算法版本口音不敏感大小寫不敏感utf8mb4_0900_ai_ci校對集對應(yīng)的字符集6.1.3校對集概述通過SHOWCOLLATION;語句查看MySQL可用的校對集:校對集名稱對應(yīng)的字符集校對集ID是否為對應(yīng)字符集的默認(rèn)校對集是否已編譯排序過程中的字符串比較操作所使用的字節(jié)數(shù)校對集的附加屬性6.1.3校對集概述
先定一個(gè)小目標(biāo)!掌握字符集和校對集的設(shè)置,能夠給數(shù)據(jù)庫、數(shù)據(jù)表和字段設(shè)置字符集和校對集。6.1.4字符集與校對集的設(shè)置1.設(shè)置數(shù)據(jù)庫的字符集和校對集在創(chuàng)建數(shù)據(jù)庫時(shí)設(shè)定字符集和校對集的語法:CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]數(shù)據(jù)庫名稱[DEFAULT]CHARACTERSET[=]字符集名稱|COLLATE[=]校對集名稱;若僅指定字符集,表示使用該字符集的默認(rèn)校對集;若僅指定校對集,表示使用該校對集對應(yīng)的字符集。6.1.4字符集與校對集的設(shè)置演示如何在創(chuàng)建數(shù)據(jù)庫時(shí)設(shè)置數(shù)據(jù)庫的字符集和校對集:#創(chuàng)建數(shù)據(jù)庫mydb_1,指定字符集utf8CREATEDATABASEmydb_1
CHARACTERSETutf8;#創(chuàng)建數(shù)據(jù)庫mydb_2,指定字符集為utf8,校對集為utf8_binCREATEDATABASEmydb_2
CHARACTERSETutf8COLLATEutf8_bin;6.1.4字符集與校對集的設(shè)置2.設(shè)置數(shù)據(jù)表的字符集和校對集設(shè)置數(shù)據(jù)表的字符集和校對集的語法格式:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]數(shù)據(jù)表名稱(字段名數(shù)據(jù)類型[字段屬性]...)[DEFAULT]CHARACTERSET[=]字符集名稱|COLLATE[=]校對集名稱;6.1.4字符集與校對集的設(shè)置演示在創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置字符集和校對集:CREATETABLEmy_charset1
(usernameVARCHAR(20))CHARACTERSETutf8COLLATEutf8_bin;6.1.4字符集與校對集的設(shè)置3.設(shè)置字段的字符集和校對集設(shè)置字段字符集和校對集的語法:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]數(shù)據(jù)表名稱(字段名數(shù)據(jù)類型[CHARACTERSET字符集名稱][COLLATE校對集名稱]...)[表選項(xiàng)];如果沒有為字段設(shè)置字符集與校對集,則該字段默認(rèn)使用數(shù)據(jù)表的字符集與校對集。6.1.4字符集與校對集的設(shè)置演示如何在創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置字段的字符集和校對集:CREATETABLEmy_charset2
(usernameVARCHAR(20)CHARACTERSETgbkCOLLATEgbk_chinese_ci);6.1.4字符集與校對集的設(shè)置演示修改字段的字符集和校對集:ALTERTABLEmy_charset2MODIFYusernameVARCHAR(20)CHARACTERSETutf8COLLATEutf8_bin;數(shù)據(jù)類型6.2
先定一個(gè)小目標(biāo)!熟悉數(shù)值類型,能夠歸納出常用的數(shù)值類型。6.2.1數(shù)值類型如何在數(shù)據(jù)庫中保存商品價(jià)格、考試分?jǐn)?shù)這些數(shù)字呢?6.2.1數(shù)值類型在MySQL中,如果希望保存數(shù)字,可以將字段的數(shù)據(jù)類型設(shè)置為數(shù)值類型,方便進(jìn)行數(shù)學(xué)計(jì)算。6.2.1數(shù)值類型數(shù)值類型整數(shù)類型浮點(diǎn)數(shù)類型定點(diǎn)數(shù)類型數(shù)值類型的分類:6.2.1數(shù)值類型1.整數(shù)類型整數(shù)類型用于存儲(chǔ)整數(shù)。整數(shù)類型根據(jù)取值范圍分類:TINYINT整數(shù)類型SMALLINTMEDIUMINTINTBIGINT6.2.1數(shù)值類型整數(shù)類型又分為無符號(UNSIGNED)整數(shù)和有符號(SIGNED)整數(shù):整數(shù)類型無符號(UNSIGNED)整數(shù)有符號(SIGNED)整數(shù)不能保存負(fù)數(shù)可以保存負(fù)數(shù)6.2.1數(shù)值類型整數(shù)類型所占用的字節(jié)數(shù)和取值范圍:類型名字節(jié)數(shù)無符號數(shù)取值范圍有符號數(shù)取值范圍TINYINT10~255-128~127SMALLINT20~65535-32768~32767MEDIUMINT30~16777215-8388608~8388607INT40~4294967295-2147483648~2147483647BIGINT80~264-1-263~263-16.2.1數(shù)值類型整數(shù)類型默認(rèn)是有符號的,如果使用無符號整數(shù)類型,需要使用UNSIGNED關(guān)鍵字修飾。例如,age字段使用“ageTINYINTUNSIGNED”表明age字段是無符號的TINYINT類型。6.2.1數(shù)值類型通過案例演示整數(shù)類型的使用及注意事項(xiàng)。6.2.1數(shù)值類型步驟一:在mydb數(shù)據(jù)庫中創(chuàng)建my_int數(shù)據(jù)表,選取INT和TINYINT兩種類型測試:CREATETABLEmy_int(int_1INT,int_2INTUNSIGNED,int_3TINYINT,int_4TINYINTUNSIGNED);6.2.1數(shù)值類型步驟二:當(dāng)添加的數(shù)據(jù)在合法的取值范圍內(nèi)時(shí),可以成功添加:mysql>INSERTINTOmy_intVALUES(1000,1000,100,100);QueryOK,1rowaffected(0.00sec)6.2.1數(shù)值類型步驟三:當(dāng)添加的數(shù)據(jù)在不合法的取值范圍內(nèi)時(shí),添加失敗并提示錯(cuò)誤信息:mysql>INSERTINTOmy_intVALUES(1000,-1000,100,100);ERROR1264(22003):Outofrangevalueforcolumn'int_2'atrow1-1000超出無符號INT類型的取值范圍,所以數(shù)據(jù)添加失敗,提示int_2字段超出取值范圍的錯(cuò)誤信息6.2.1數(shù)值類型2.浮點(diǎn)數(shù)類型浮點(diǎn)數(shù)類型用于保存小數(shù)。FLOAT(單精度浮點(diǎn)數(shù))DOUBLE(雙精度浮點(diǎn)數(shù))運(yùn)算速度快精度高,消耗內(nèi)存大浮點(diǎn)數(shù)類型6.2.1數(shù)值類型通過案例演示浮點(diǎn)數(shù)類型的使用及注意事項(xiàng)。6.2.1數(shù)值類型步驟一:創(chuàng)建數(shù)據(jù)表my_float:CREATETABLEmy_float(f1FLOAT,f2FLOAT);6.2.1數(shù)值類型步驟二:添加數(shù)據(jù)并查看結(jié)果:#添加未超出精度的數(shù)字mysql>INSERTINTOmy_floatVALUES(111111,1.11111);QueryOK,1rowaffected(0.00sec)#添加超出精度的數(shù)字mysql>INSERTINTOmy_floatVALUES(1111111,1.111111);QueryOK,1rowaffected(0.00sec)mysql>INSERTINTOmy_floatVALUES(1111114,1111115);QueryOK,1rowaffected(0.00sec)mysql>INSERTINTOmy_floatVALUES(11111149,11111159);QueryOK,1rowaffected(0.00sec)mysql>SELECT*FROMmy_float;+-----------+-----------+|f1|f2|+-----------+-----------+|111111|1.11111||1111110|1.11111||1111110|1111120||11111100|11111200|+-----------+-----------+6.2.1數(shù)值類型3.定點(diǎn)數(shù)類型定點(diǎn)數(shù)類型用于保存確切精度的小數(shù)。定點(diǎn)數(shù)類型使用DECIMAL或NUMERIC表示,兩者被視為相同的類型。以DECIMAL為例,定點(diǎn)數(shù)類型的定義方式:DECIMAL(M,D)DECIMAL(5,2)123.4552M:整數(shù)部分加小數(shù)部分的總長度,取值范圍為0~65,默認(rèn)值為10,超出范圍會(huì)報(bào)錯(cuò);D:小數(shù)點(diǎn)后可存儲(chǔ)的位數(shù),取值范圍為0~30,默認(rèn)值為0,且必須滿足D<=M。6.2.1數(shù)值類型通過案例演示DECIMAL類型的使用及注意事項(xiàng)。6.2.1數(shù)值類型步驟一:創(chuàng)建數(shù)據(jù)表my_decimal:CREATETABLEmy_decimal(d1DECIMAL(4,2),d2DECIMAL(4,2));6.2.1數(shù)值類型步驟二:如果添加的數(shù)據(jù)的小數(shù)部分超出取值范圍,會(huì)四舍五入并出現(xiàn)警告:mysql>INSERTINTOmy_decimalVALUES(1.234,1.235);QueryOK,1rowaffected,2warnings(0.00sec)mysql>SHOWWARNINGS;#查看警告信息+-------+------+--------------------------------------------+|Level|Code|Message|+-------+------+--------------------------------------------+|Note|1265|Datatruncatedforcolumn'd1'atrow1||Note|1265|Datatruncatedforcolumn'd2'atrow1|+-------+------+--------------------------------------------+小數(shù)部分超出范圍,出現(xiàn)數(shù)據(jù)截?cái)嗑?.2.1數(shù)值類型查詢添加結(jié)果:mysql>SELECT*FROMmy_decimal;+------+------+|d1|d2|+------+------+|1.23|1.24|+------+------+1.234≈1.231.235≈1.246.2.1數(shù)值類型步驟三:添加的數(shù)據(jù)的小數(shù)部分四舍五入導(dǎo)致整數(shù)部分進(jìn)位時(shí),會(huì)添加失敗:mysql>INSERTINTOmy_decimalVALUES(99.99,99.999);ERROR1264(22003):Outofrangevalueforcolumn'd2'atrow1數(shù)字99.999四舍五入后進(jìn)位,結(jié)果為100.00,整數(shù)部分超出了取值范圍,數(shù)據(jù)添加失敗,出現(xiàn)超出取值范圍錯(cuò)誤。6.2.1數(shù)值類型
先定一個(gè)小目標(biāo)!熟悉字符串類型,能夠歸納出常用的字符串類型。6.2.2字符串類型如何在數(shù)據(jù)庫中保存姓名、地址這些文本數(shù)據(jù)呢?姓名:張三地址:北京市海淀區(qū)中關(guān)村6.2.2字符串類型對于一些文本信息類的數(shù)據(jù),例如姓名、家庭住址等,在MySQL中適合保存為字符串類型。6.2.2字符串類型CHAR和VARCHAR類型SET類型字符串類型TEXT系列類型ENUM類型6.2.2字符串類型1.CHAR和VARCHAR類型CHAR類型和VARCHAR類型的字段用于存儲(chǔ)字符串?dāng)?shù)據(jù)。CHAR類型的字段用于存儲(chǔ)固定長度的字符串,固定長度可以是0~255中的任意整數(shù)值;VARCHAR類型的字段用于存儲(chǔ)可變長度的字符串,可變長度可以是0~65535中的任意整數(shù)值。定義CHAR類型的語法格式:CHAR(M)M指字符串的最大長度。根據(jù)M分配存儲(chǔ)空間,無論有沒有被存滿,都會(huì)占用存滿時(shí)的儲(chǔ)存空間。定義VARCHAR類型的語法格式:VARCHAR(M)M指字符串的最大長度。根據(jù)實(shí)際存儲(chǔ)的字符串的長度占用存儲(chǔ)空間。6.2.2字符串類型對比CHAR(4)和VARCHAR(4)的區(qū)別:字符串CHAR(4)值
存儲(chǔ)空間VARCHAR(4)值存儲(chǔ)空間''''4字節(jié)''1字節(jié)'ab''ab'4字節(jié)'ab'3字節(jié)'abcd''abcd'4字節(jié)'abcd'5字節(jié)'abcdefgh''abcd'4字節(jié)'abcd'5字節(jié)CHAR(4)類型無論添加值的長度是多少,所占用的存儲(chǔ)空間都是4字節(jié),而VARCHAR(4)占用的字節(jié)數(shù)為實(shí)際長度加1。6.2.2字符串類型注意:在向CHAR類型和VARCHAR類型的字段插入字符串時(shí),如果插入的字符串尾部存在空格,CHAR類型的字段會(huì)去除空格存儲(chǔ)字符串,VARCHAR類型的字段會(huì)保留空格存儲(chǔ)字符串。6.2.2字符串類型通過案例演示CHAR和VARCHAR的使用方法。6.2.2字符串類型創(chuàng)建數(shù)據(jù)表my_char:CREATETABLEmy_char(c1char(5),c2varchar(5));添加長度等于指定長度的字符串:mysql>INSERTINTOmy_charVALUES('12345','12345');QueryOK,1rowaffected(0.01sec)添加長度大于指定長度的字符串:mysql>INSERTINTOmy_charVALUES('123456','123456');ERROR1406(22001):Datatoolongforcolumn'c1'atrow1當(dāng)添加的字符串的長度大于字段指定的長度時(shí),會(huì)添加失敗,出現(xiàn)Datatoolong(數(shù)據(jù)太長)的錯(cuò)誤提示信息。6.2.2字符串類型2.TEXT系列類型TEXT系列類型的字段通常用于存儲(chǔ)文章內(nèi)容、評論等較長的字符串。TINYTEXTTEXT系列TEXTLONGTEXTMEDIUMTEXT6.2.2字符串類型TEXT系列類型:類型名類型說明存儲(chǔ)范圍TINYTEXT存儲(chǔ)短文本數(shù)據(jù)0~L+1個(gè)字節(jié),其中L<28TEXT存儲(chǔ)普通文本數(shù)據(jù)0~L+2個(gè)字節(jié),其中L<216MEDIUMTEXT存儲(chǔ)中等文本數(shù)據(jù)0~L+3個(gè)字節(jié),其中L<224LONGTEXT存儲(chǔ)超大文本數(shù)據(jù)0~L+4個(gè)字節(jié),其中L<232L表示給定字符串的實(shí)際長度(以字節(jié)為單位)6.2.2字符串類型通過案例演示TEXT類型的使用方法。6.2.2字符串類型步驟一:創(chuàng)建數(shù)據(jù)表my_text:CREATETABLEmy_text
(
t1text);6.2.2字符串類型步驟二:向my_text數(shù)據(jù)表中添加數(shù)據(jù)。INSERTINTOmy_textVALUES('Thisisacontent.');6.2.2字符串類型3.ENUM類型ENUM類型又稱為枚舉類型,占用1~2字節(jié)大小的存儲(chǔ)空間。定義ENUM類型的語法格式:ENUM('值1','值2','值3',...,'值n')('值1','值2','值3',…,'值n')稱為枚舉列表,該列表中的每一項(xiàng)稱為成員。枚舉列表最多可以有65535個(gè)成員,每個(gè)成員都有一個(gè)索引值,索引值從1開始,依次遞增。ENUM類型的數(shù)據(jù)只能從成員中選取單個(gè)值,不能一次選取多個(gè)值。6.2.2字符串類型通過案例演示ENUM類型的使用。6.2.2字符串類型#創(chuàng)建數(shù)據(jù)表CREATETABLEmy_enum(genderENUM('male','female'));#添加枚舉列表中存在的值mysql>INSERTINTOmy_enumVALUES('male'),('female');QueryOK,1rowaffected(0.01sec)#添加枚舉列表中不存在的值mysql>INSERTINTOmy_enumVALUES('m');ERROR1265(01000):Datatruncatedforcolumn'gender'atrow1創(chuàng)建my_enum數(shù)據(jù)表,向my_enum添加枚舉列表中存在和不存在的值:6.2.2字符串類型4.SET類型SET類型用于保存字符串對象??梢杂?個(gè)或多個(gè)值,每個(gè)值都必須從創(chuàng)建表時(shí)指定的值列表中選擇。定義SET類型的語法格式:SET('值1','值2','值3',...,'值n')SET類型的列表中最多可以有64個(gè)成員,SET類型占用的字節(jié)取決于成員的數(shù)量。6.2.2字符串類型SET類型和ENUM類型的優(yōu)勢:規(guī)范了數(shù)據(jù)本身,限定只能添加規(guī)定的數(shù)據(jù)項(xiàng),它們的查詢速度比CHAR、VARCHAR類型的查詢速度快,節(jié)省存儲(chǔ)空間。SET類型與ENUM類型的區(qū)別:SET類型可以從列表中選擇一個(gè)或多個(gè)值來保存,多個(gè)值之間用逗號“,”分隔,而ENUM類型只能從列表中選擇一個(gè)值來保存。6.2.2字符串類型在使用SET類型與ENUM類型時(shí)的注意事項(xiàng):①ENUM和SET類型列表中的值都可以是中文字符,但必須設(shè)置支持中文的字符集。②ENUM和SET類型在填寫列表、插入值、查找值等操作時(shí),都會(huì)自動(dòng)忽略末尾的空格。6.2.2字符串類型通過案例演示SET類型的使用。6.2.2字符串類型#創(chuàng)建數(shù)據(jù)表CREATETABLEmy_set(
hobby
SET('book','game','code'));#添加3條測試數(shù)據(jù)INSERTINTOmy_set
VALUES(''),('book'),('book,code');mysql>SELECT*FROMmy_set;+------------+|hobby|+------------+|
||book
||book,code|+------------+創(chuàng)建my_set數(shù)據(jù)表,添加數(shù)據(jù)并查看數(shù)據(jù):6.2.2字符串類型DELETEFROMmy_set;INSERTINTOmy_setVALUES('book,book');mysql>SELECT*FROMmy_set;+------------+|hobby|+------------+|book|+------------+添加重復(fù)的值時(shí),會(huì)自動(dòng)刪除重復(fù)的值刪除數(shù)據(jù)后添加重復(fù)的值,查詢數(shù)據(jù)是否添加成功:6.2.2字符串類型mysql>INSERTINTOmy_setVALUES('test');ERROR1265(01000):Datatruncatedforcolumn'hobby'atrow1添加不存在的值時(shí),會(huì)提示錯(cuò)誤信息添加不存在的值,查詢數(shù)據(jù)是否添加成功:6.2.2字符串類型
先定一個(gè)小目標(biāo)!熟悉日期和時(shí)間類型,能夠歸納出常用的日期和時(shí)間類型。6.2.3日期和時(shí)間類型如何在數(shù)據(jù)庫中保存日期和時(shí)間呢?6.2.3日期和時(shí)間類型為了方便在數(shù)據(jù)庫中保存日期和時(shí)間,MySQL提供了一些日期和時(shí)間類型。6.2.3日期和時(shí)間類型YEAR日期和時(shí)間類型DATETIMEDATETIMETIMESTAMP6.2.3日期和時(shí)間類型日期和時(shí)間類型詳細(xì)說明:類型名字節(jié)數(shù)范圍格式描述YEAR11901~2155YYYY年份數(shù)據(jù)DATE31000-01-01~9999-12-31YYYY-MM-DD日期數(shù)據(jù)TIME3-838:59:59~838:59:59HH:MM:SS時(shí)間數(shù)據(jù)或持續(xù)時(shí)間DATETIME81000-01-01
00:00:00~9999-12-31
23:59:59YYYY-MM-DD
HH:MM:SS日期和時(shí)間數(shù)據(jù)TIMESTAMP41970-01-01
00:00:01~2038-01-19
03:14:07YYYY-MM-DD
HH:MM:SS日期和時(shí)間數(shù)據(jù),保存為時(shí)間戳日期格式Y(jié)YYY-MM-DD中的YYYY表示年,MM表示月,DD表示日。時(shí)間格式HH:MM:SS中的HH表示時(shí),MM表示分,SS表示秒。6.2.3日期和時(shí)間類型1.YEAR類型YEAR類型用于存儲(chǔ)年份數(shù)據(jù)。指定YEAR類型的值的3種方法:格式說明舉例4位的字符串或數(shù)字表示'1901'~'2155'或1901~2155使用'2023'或2023插入數(shù)據(jù)表的年份為2023兩位的字符串'00'~'99''00'~'69'表示2000~2069,'70'~'99'表示1970~1999使用'23'插入數(shù)據(jù)表的年份為2023數(shù)字0~990表示0000,1~69表示2001~2069,70~99表示1970~1999使用23插入數(shù)據(jù)表的年份為20236.2.3日期和時(shí)間類型通過案例演示YEAR類型的使用。6.2.3日期和時(shí)間類型#創(chuàng)建數(shù)據(jù)表mysql>CREATETABLEmy_year(yYEAR);#添加年份數(shù)據(jù)mysql>INSERTINTOmy_year->VALUES(2023),('23'),(23);mysql>SELECT*FROMmy_year;+------+|y|+------+|2023
||2023
||2023
|+------+創(chuàng)建my_year數(shù)據(jù)表,添加年份數(shù)據(jù)后查看數(shù)據(jù):6.2.3日期和時(shí)間類型2.DATE類型DATE類型用于存儲(chǔ)日期數(shù)據(jù),包括年、月、日。指定DATE類型的值的4種格式:格式舉例'YYYY-MM-DD'或'YYYYMMDD'使用'2023-01-01'或'20230101'插入數(shù)據(jù)表中的日期為2023-01-01'YY-MM-DD'或'YYMMDD'使用'23-01-01'或'230101'插入數(shù)據(jù)表中的日期為2023-01-01數(shù)字YYMMDD使用230101插入數(shù)據(jù)表中的日期為2023-01-01使用CURRENT_DATE或NOW()表示當(dāng)前系統(tǒng)日期6.2.3日期和時(shí)間類型通過案例演示DATE類型的使用。6.2.3日期和時(shí)間類型#創(chuàng)建數(shù)據(jù)表mysql>CREATETABLEmy_date(dDATE);#添加日期數(shù)據(jù)mysql>INSERTINTOmy_dateVALUES('2023-01-01'),(CURRENT_DATE),(NOW());QueryOK,3rowsaffected,1warning(0.01sec)Records:3Duplicates:0Warnings:1mysql>SELECT*FROMmy_date;+------------+|d|+------------+|2023-01-01
||2023-07-21
||2023-07-21
|+------------+創(chuàng)建my_date數(shù)據(jù)表,添加年份數(shù)據(jù)后查看數(shù)據(jù):6.2.3日期和時(shí)間類型3.TIME類型TIME類型用于存儲(chǔ)時(shí)間數(shù)據(jù),包括時(shí)、分、秒。指定TIME類型的值的3種方法:方法舉例字符串'HHMMSS'或者數(shù)字HHMMSS使用'345454'或345454插入的時(shí)間為34:54:54(34小時(shí)54分54秒)字符串'DHH:MM:SS'D表示日,取值范圍是0~34,時(shí)的計(jì)算方式為D×24+HH使用'211:30:50'插入的時(shí)間為59:30:50使用CURRENT_TIME或NOW()表示當(dāng)前系統(tǒng)時(shí)間6.2.3日期和時(shí)間類型通過案例演示TIME類型的使用。6.2.3日期和時(shí)間類型#創(chuàng)建數(shù)據(jù)表mysql>CREATETABLEmy_time(tTIME);QueryOK,0rowsaffected(0.02sec)#添加數(shù)據(jù)mysql>INSERTINTOmy_timeVALUES('345454'),('211:30:50'),(CURRENT_TIME),(NOW());QueryOK,4rowsaffected(0.01sec)Records:4Duplicates:0Warnings:0mysql>SELECT*FROMmy_time;+----------+|t|+----------+|34:54:54||59:30:50||16:21:41||16:21:41|+----------+創(chuàng)建my_time數(shù)據(jù)表,添加時(shí)間數(shù)據(jù)后查看數(shù)據(jù):6.2.3日期和時(shí)間類型4.DATETIME類型DATETIME類型用于存儲(chǔ)日期和時(shí)間數(shù)據(jù),通常用于保存年、月、日、時(shí)、分、秒。指定DATETIME類型的值的4種格式:格式舉例字符串'YYYY-MM-DDHH:MM:SS'或'YYYYMMDDHHMMSS'使用'2023-01-0101:01:01'或'20230101010101'插入數(shù)據(jù)庫的日期和時(shí)間是2023-01-0101:01:01字符串'YY-MM-DDHH:MM:SS'或'YYMMDDHHMMSS'使用'23-01-0101:01:01'或'230101010101'插入到數(shù)據(jù)庫中的日期和時(shí)間是2023-01-0101:01:01。數(shù)字YYYYMMDDHHMMSS或YYMMDDHHMMSS使用20230122090123或230122090123插入數(shù)據(jù)庫中的日期和時(shí)間是2023-01-2209:01:23使用NOW()表示當(dāng)前系統(tǒng)的日期和時(shí)間6.2.3日期和時(shí)間類型通過案例演示DATETIME類型的使用。6.2.3日期和時(shí)間類型#創(chuàng)建數(shù)據(jù)表mysql>CREATETABLEmy_datetime(dDATETIME);QueryOK,0rowsaffected(0.02sec)#添加數(shù)據(jù)mysql>INSERTINTOmy_datetimeVALUES('2023-01-0109:01:23',(NOW());QueryOK,2rowsaffected(0.01sec)Records:2Duplicates:0Warnings:0mysql>SELECT*FROMmy_datetime;+-----------------------+|d|+-----------------------+|2023-01-0109:01:23||2023-07-2116:23:30|+-----------------------+創(chuàng)建my_datetime數(shù)據(jù)表,添加時(shí)間數(shù)據(jù)后查看數(shù)據(jù):6.2.3日期和時(shí)間類型5.TIMESTAMP類型TIMESTAMP類型用于存儲(chǔ)日期和時(shí)間數(shù)據(jù),它的使用方法與DATETIME類型的類似。TIMESTAMP類型與DATATIME類型的區(qū)別:TIMESTAMP類型的取值范圍比DATATIME類型的小。TIMESTAMP類型的數(shù)據(jù)和時(shí)區(qū)有關(guān),系統(tǒng)會(huì)根據(jù)當(dāng)前系統(tǒng)所設(shè)置的時(shí)區(qū),將日期和時(shí)間數(shù)據(jù)進(jìn)行轉(zhuǎn)換后存放;從數(shù)據(jù)庫中取出TIMESTAMP類型的數(shù)據(jù)時(shí),系統(tǒng)也會(huì)將數(shù)據(jù)轉(zhuǎn)換為對應(yīng)時(shí)區(qū)時(shí)間后顯示。TIMESTAMP類型可以使用CURRENT_TIMESTAMP表示當(dāng)前系統(tǒng)日期和時(shí)間。6.2.3日期和時(shí)間類型通過案例演示TIMESTAMP類型的使用。6.2.3日期和時(shí)間類型#創(chuàng)建數(shù)據(jù)表mysql>CREATETABLEmy_timestamp(tTIMESTAMP);QueryOK,0rowsaffected(0.02sec)#添加數(shù)據(jù)mysql>INSERTINTOmy_timestamp->VALUES('2023-01-0100:00:00'),(CURRENT_TIMESTAMP);QueryOK,2rowsaffected(0.01sec)Records:2Duplicates:0Warnings:0mysql>SELECT*FROMmy_timestamp;+-----------------------+|t|+-----------------------+|2023-01-0100:00:00||2023-07-2116:26:26|+-----------------------+創(chuàng)建my_timestamp數(shù)據(jù)表,添加日期和時(shí)間數(shù)據(jù)后查看數(shù)據(jù):6.2.3日期和時(shí)間類型數(shù)據(jù)表的約束6.3
先定一個(gè)小目標(biāo)!掌握設(shè)置默認(rèn)值約束的方法,能夠給數(shù)據(jù)表設(shè)置默認(rèn)值約束。6.3.1默認(rèn)值約束學(xué)生姓名年齡小紅6小明6小麗6學(xué)生的年齡都是6歲6.3.1默認(rèn)值約束是否可以給數(shù)據(jù)表中的年齡字段添加一個(gè)默認(rèn)值6呢?6.3.1默認(rèn)值約束默認(rèn)值約束用于給數(shù)據(jù)表中的字段指定默認(rèn)值,通過DEFAULT關(guān)鍵字可以設(shè)置字段的默認(rèn)值約束。6.3.1默認(rèn)值約束設(shè)置默認(rèn)值約束的方式在創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置默認(rèn)值約束在修改數(shù)據(jù)表時(shí)設(shè)置默認(rèn)值約束6.3.1默認(rèn)值約束設(shè)置默認(rèn)值約束的語法格式:#在創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置默認(rèn)值約束CREATETABLE數(shù)據(jù)表名稱(
字段名數(shù)據(jù)類型DEFAULT默認(rèn)值,...);#在修改數(shù)據(jù)表時(shí)設(shè)置默認(rèn)值約束ALTERTABLE數(shù)據(jù)表名稱MODIFY字段名數(shù)據(jù)類型DEFAULT默認(rèn)值;6.3.1默認(rèn)值約束通過案例演示默認(rèn)值約束的使用。6.3.1默認(rèn)值約束步驟一:創(chuàng)建數(shù)據(jù)表my_default,為age字段設(shè)置默認(rèn)值約束,默認(rèn)值18,查看表結(jié)構(gòu):#創(chuàng)建數(shù)據(jù)表CREATETABLEmy_default(nameVARCHAR(10),
ageTINYINTUNSIGNEDDEFAULT18);#查看表結(jié)構(gòu)mysql>DESCmy_default;+-------+------------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+------------------+------+-----+---------+-------+|name|varchar(10)|YES||NULL|||age|tinyintunsigned|YES||18||+-------+------------------+------+-----+---------+-------+6.3.1默認(rèn)值約束步驟二:添加數(shù)據(jù)進(jìn)行測試:#省略age字段INSERTINTOmy_default(name)VALUES('a');
#在age字段中插入NULL值INSERTINTOmy_defaultVALUES('b',NULL);#在age字段中使用DEFAULT關(guān)鍵字INSERTINTOmy_defaultVALUES('c',DEFAULT);SELECT*FROMmy_default;+------+------+|name|age|+------+------+|a|18||b|NULL||c|18|+------+------+6.3.1默認(rèn)值約束
先定一個(gè)小目標(biāo)!掌握設(shè)置非空約束的方法,能夠給數(shù)據(jù)表設(shè)置非空約束。6.3.2非空約束學(xué)生姓名年齡小紅6小明7?8小麗的年齡是多少?年齡是8歲的學(xué)生是誰?6.3.2非空約束如何要求數(shù)據(jù)表中學(xué)生姓名這一列不能有空數(shù)據(jù)呢?6.3.2非空約束非空約束用于確保插入字段中值的非空性。如果字段沒有設(shè)置非空約束,字段默認(rèn)允許插入NULL值;如果字段設(shè)置了非空約束,該字段中存放的值必須是NULL值之外的其他的具體值。在MySQL中,通過NOTNULL關(guān)鍵字設(shè)置字段的非空約束。6.3.2非空約束設(shè)置非空約束的方式在創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置非空約束在修改數(shù)據(jù)表時(shí)設(shè)置非空約束6.3.2非空約束給數(shù)據(jù)表設(shè)置非空約束的語法格式:#在創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置非空約束CREATETABLE數(shù)據(jù)表名稱(字段名數(shù)據(jù)類型NOTNULL);#在修改數(shù)據(jù)表時(shí)設(shè)置非空約束ALTERTABLE數(shù)據(jù)表名稱MODIFY字段名數(shù)據(jù)類型NOTNULL;6.3.2非空約束通過案例演示非空約束的使用。6.3.2非空約束步驟一:創(chuàng)建數(shù)據(jù)表my_not_null,表中包含n1和n2兩個(gè)字段,為n2設(shè)置非空約束:CREATETABLEmy_not_null(n1INT,n2INTNOTNULL);mysql>DESCmy_not_null;+-------+------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+------+------+-----+---------+-------+|n1|int|YES||NULL|||n2|int|NO||NULL||+-------+------+------+-----+---------+-------+n2添加非空約束未給該字段設(shè)置默認(rèn)值6.3.2非空約束步驟二:添加數(shù)據(jù):#省略n1和n2字段mysql>INSERTINTOmy_not_nullVALUES();ERROR1364(HY000):Field'n2'doesn'thaveadefaultvalue#設(shè)置n2字段的值為NULLmysql>INSERTINTOmy_not_nullVALUES(NULL,NULL);ERROR1048(23000):Column'n2'cannotbenull#省略n1字段,設(shè)置n2字段的值為20mysql>INSERTINTOmy_not_null(n2)VALUES(20);QueryOK,1rowaffected(0.01sec)n2字段有非空約束,省略n2字段插入失敗,提示n2沒有默認(rèn)值n2字段有非空約束,值不允許為NULL添加成功6.3.2非空約束
先定一個(gè)小目標(biāo)!掌握設(shè)置唯一約束的方法,能夠給數(shù)據(jù)表設(shè)置唯一約束。6.3.3唯一約束員工姓名郵箱地址小紅xiaohong@小明xiaohong@xiaohong@如果通過郵箱給小紅發(fā)送工資單,小明也會(huì)收到小紅的工資單。6.3.3唯一約束如何讓數(shù)據(jù)表中郵箱地址這一列不能出現(xiàn)重復(fù)的數(shù)據(jù)呢?6.3.3唯一約束唯一約束用于確保字段中值的唯一性。如果數(shù)據(jù)表中的字段設(shè)置了唯一約束,那么該字段中存放的值不能重復(fù)出現(xiàn)。在MySQL中,通過UNIQUE設(shè)置字段的唯一約束。6.3.3唯一約束創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置唯一約束的兩種方式:列級約束定義在列中,緊跟在字段的數(shù)據(jù)類型之后,只對該字段起約束作用。表級約束表級約束獨(dú)立于字段,可以對數(shù)據(jù)表的單個(gè)或多個(gè)字段起約束作用。可通過多個(gè)字段確保唯一性。當(dāng)表級約束僅建立在一個(gè)字段上時(shí),其效果與列級約束相同。6.3.3唯一約束創(chuàng)建數(shù)據(jù)表時(shí)設(shè)置列級唯一約束和表級唯一約束的語法格式:列級唯一約束CREATETABLE數(shù)據(jù)表名稱(
字段名1數(shù)據(jù)類型UNIQUE,
字段名2數(shù)據(jù)類型UNIQUE...);表級唯一約束CREATETABLE數(shù)據(jù)表名稱(
字段名1數(shù)據(jù)類型,
字段名2數(shù)據(jù)類型,
字段名3數(shù)據(jù)類型,
...
UNIQUE(字段名1[,字段名2,...]));6.3.3唯一約束使用ALTERTABLE語句的MODIFY子句在修改數(shù)據(jù)表時(shí)設(shè)置唯一約束:ALTERTABLE數(shù)據(jù)表名稱MODIFY字段名數(shù)據(jù)類型UNIQUE;6.3.3唯一約束通過案例演示唯一約束的使用。6.3.3唯一約束步驟一:在創(chuàng)建數(shù)據(jù)表時(shí)添加列級唯一約束和表級唯一約束:#添加列級唯一約束CREATETABLEmy_unique1(idINTUNSIGNEDUNIQUE,
nameVARCHAR(10)UNIQUE);#添加表級唯一約束CREATETABLEmy_unique2(idINTUNSIGNED,
nameVARCHAR(10),UNIQUE(`id`),UNIQUE(`name`));6.3.3唯一約束步驟二:向my_unique1添加不重復(fù)的數(shù)據(jù):mysql>INSERTINTOmy_unique1(id)VALUES(1);QueryOK,1rowaffected(0.01sec)mysql>INSERTINTOmy_unique1(id)VALUES(2);QueryOK,1rowaffected(0.01sec)mysql>SELECT*FROMmy_unique1;+----+-------+|id|name|+----+-------+|1|NULL||2|NULL|+----+-------+name字段出現(xiàn)了重復(fù)值NULL,唯一約束允許存在多個(gè)NULL值6.3.3唯一約束步驟三:向my_unique1添加重復(fù)的數(shù)據(jù):mysql>INSERTINTOmy_unique1(id)VALUES(1);ERROR1062(23000):Duplicateentry'1'forkey'my_unique1.id'向id字段添加重復(fù)值1時(shí),出現(xiàn)id字段出現(xiàn)重復(fù)值的錯(cuò)誤。6.3.3唯一約束
先定一個(gè)小目標(biāo)!掌握設(shè)置主鍵約束的方法,能夠給數(shù)據(jù)表設(shè)置主鍵約束。6.3.4主鍵約束學(xué)生編號學(xué)生姓名1小紅2小明2小麗NULL小花小明和小麗的編號都是2,查詢編號是2的學(xué)生時(shí)會(huì)有2條數(shù)據(jù)。編號為NULL的數(shù)據(jù)不能確定是哪名學(xué)生。6.3.4主鍵約束如果數(shù)據(jù)表中已存在編號為2的數(shù)據(jù),再次添加編號為2的數(shù)據(jù)時(shí),不允許添加,并且限制學(xué)生編號不允許添加NULL值。6.3.4主鍵約束主鍵約束相當(dāng)于非空約束和唯一約束的組合,它要求被約束字段中的值不能出現(xiàn)重復(fù)值,也不能出現(xiàn)NULL值。通過PRIMARYKEY關(guān)鍵字給字段設(shè)置主鍵約束,每個(gè)數(shù)據(jù)表只能設(shè)置一個(gè)主鍵約束。6.3.4主鍵約束在創(chuàng)建數(shù)據(jù)表時(shí)可以設(shè)置列級或者表級的主鍵約束。列級主鍵約束只能對單字段設(shè)置,表級主鍵約束可以對單字段或者多字段設(shè)置。當(dāng)為多字段設(shè)置主鍵約束時(shí),會(huì)形成復(fù)合主鍵。在創(chuàng)建數(shù)據(jù)表時(shí)給字段設(shè)置列級主鍵約束和表級主鍵約束的語法格式:列級主鍵約束CREATETABLE數(shù)據(jù)表名稱(
字段名數(shù)據(jù)類型PRIMARYKEY,...);表級主鍵約束CREATETABLE數(shù)據(jù)表名稱(
字段名1數(shù)據(jù)類型,
字段名2數(shù)據(jù)類型,...
PRIMARYKEY(字段名1[,字段名2,...]));6.3.4主鍵約束在修改數(shù)據(jù)表時(shí)設(shè)置主鍵約束,可以通過ALTERTABLE語句的MODIFY子句實(shí)現(xiàn):ALTERTABLE數(shù)據(jù)表名稱MODIFY
字段名數(shù)據(jù)類型PRIMARYKEY;6.3.4主鍵約束通過案例演示主鍵約束的使用。6.3.4主鍵約束步驟一:創(chuàng)建數(shù)據(jù)表my_primary,為id字段添加主鍵約束,查看表結(jié)構(gòu):CREATETABLEmy_primary(idINTPRIMARYKEY,usernameVARCHAR(20));DESCmy_primary;+----------+-------------+------+-----+---------+-------+|
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中衛(wèi)市檢察系統(tǒng)考試真題
- 2025年煤礦回采工藝試題及答案
- 現(xiàn)代物流產(chǎn)業(yè)園項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)評估報(bào)告
- 社交禮儀知識關(guān)鍵要點(diǎn)試題及答案
- 2025年水利水電工程安全生產(chǎn)基礎(chǔ)知識試題及答案
- 20萬千瓦風(fēng)電工程社會(huì)穩(wěn)定風(fēng)險(xiǎn)評估報(bào)告
- 2025財(cái)會(huì)類專技崗考試真題及答案
- 2025病理學(xué)考試真題及答案
- 2025殯儀協(xié)會(huì)考試真題及答案
- 游泳教練基本考試題
- 導(dǎo)管相關(guān)并發(fā)癥的預(yù)防及處理
- 鐵路信號基礎(chǔ)繼電器詳解
- 外墻真石漆工程安全文明施工保證措施及環(huán)境保護(hù)體系和保證措施
- 等離子點(diǎn)火系統(tǒng)及暖風(fēng)器系統(tǒng)培訓(xùn)
- 2024年金華市中心醫(yī)院醫(yī)療集團(tuán)(醫(yī)學(xué)中心)招聘筆試真題
- 新課標(biāo)體育與健康教案集(水平四)
- 混凝土結(jié)構(gòu)設(shè)計(jì)原理(第五版)課后習(xí)題答案
- 中國非遺文化魚燈介紹介紹2
- 金華市金東區(qū)合同制教師管理辦法
- 5.申恒梅-環(huán)境空氣自動(dòng)監(jiān)測數(shù)據(jù)審核、評價(jià)及異常數(shù)據(jù)判定
- 智能安防系統(tǒng)維護(hù)與保養(yǎng)手冊
評論
0/150
提交評論