




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第二章數(shù)據(jù)庫和表的根本操作表的約束設置表的字段值自動增加索引數(shù)據(jù)庫根底知識數(shù)據(jù)類型數(shù)據(jù)表的根本操作?學習目標3了解數(shù)據(jù)類型2熟悉索引的作用,會創(chuàng)建和刪除索引掌握了解熟悉掌握數(shù)據(jù)庫的基本操作、數(shù)據(jù)表的基本操作、表的約束1數(shù)據(jù)庫基礎知識2.1?點擊查看本小節(jié)知識架構數(shù)據(jù)類型2.2?點擊查看本小節(jié)知識架構數(shù)據(jù)表的基本操作2.3?點擊查看本小節(jié)知識架構表的約束2.4?點擊查看本小節(jié)知識架構設置表的字段值自動增加2.5索引2.6?點擊查看本小節(jié)知識架構知識架構2.1數(shù)據(jù)庫根底知識返回目錄創(chuàng)立和查看數(shù)據(jù)庫修改數(shù)據(jù)庫刪除數(shù)據(jù)庫2.2數(shù)據(jù)類型返回目錄知識架構整數(shù)類型浮點數(shù)類型和定點數(shù)類型日期與時間類型字符串和二進制類型2.3數(shù)據(jù)表的根本操作返回目錄知識架構創(chuàng)立數(shù)據(jù)表查看數(shù)據(jù)表修改數(shù)據(jù)表刪除數(shù)據(jù)表2.4表的約束返回目錄知識架構主鍵約束非空約束唯一約束默認約束知識架構返回目錄索引的概念創(chuàng)立索引刪除索引2.6索引2.1數(shù)據(jù)庫根底知識2.1.1創(chuàng)立和查看數(shù)據(jù)庫創(chuàng)立數(shù)據(jù)庫就是在數(shù)據(jù)庫系統(tǒng)中劃分一塊存儲數(shù)據(jù)的空間,MySQL中,創(chuàng)立數(shù)據(jù)庫的根本語法格式如下所示:【例2-1】創(chuàng)立一個名稱為itcast的數(shù)據(jù)庫,SQL語句如下所示:執(zhí)行結果如下所示:CREATEDATABASE數(shù)據(jù)庫名稱;CREATEDATABASEitcast;2.1數(shù)據(jù)庫根底知識2.1.1創(chuàng)立和查看數(shù)據(jù)庫為了驗證數(shù)據(jù)庫系統(tǒng)中是否創(chuàng)立了名稱為itcast的數(shù)據(jù)庫,需要查看數(shù)據(jù)庫,在MySQL中,查看數(shù)據(jù)庫的SQL語句如下所示:【例2-2】使用SHOW語句查看已經存在的數(shù)據(jù)庫,執(zhí)行結果如下所示:SHOWDATABASES;2.1數(shù)據(jù)庫根底知識2.1.1創(chuàng)立和查看數(shù)據(jù)庫創(chuàng)立好數(shù)據(jù)庫之后,要想查看某個已經創(chuàng)立的數(shù)據(jù)庫信息,可以通過SHOWCREATEDATABASE語句查看,具體語法格式如下所示:SHOWCREATEDATABASE數(shù)據(jù)庫名稱;2.1數(shù)據(jù)庫根底知識2.1.1創(chuàng)立和查看數(shù)據(jù)庫【例2-3】查看創(chuàng)立好的數(shù)據(jù)庫itcast的信息,SQL語句如下所示:執(zhí)行結果如下所示:SHOWCREATEDATABASEitcast;2.1數(shù)據(jù)庫根底知識2.1.2修改數(shù)據(jù)庫MySQL數(shù)據(jù)庫一旦安裝成功,創(chuàng)立的數(shù)據(jù)庫編碼也就確定了。但如果想修改數(shù)據(jù)庫的編碼,可以使用ALTERDATABASE語句實現(xiàn)。修改數(shù)據(jù)庫編碼的根本語法格式如下所示:在上述格式中,“數(shù)據(jù)庫名稱〞指的是要修改的數(shù)據(jù)庫,“編碼方式〞指的是修改后的數(shù)據(jù)庫編碼。ALTERDATABASE數(shù)據(jù)庫名稱DEFAULTCHARACTERSET
編碼方式COLLATE編碼方式_bin2.1數(shù)據(jù)庫根底知識2.1.2修改數(shù)據(jù)庫
【例2-4】將數(shù)據(jù)庫itcast的編碼修改為gbk,SQL語句如下所示:為了驗證數(shù)據(jù)庫的編碼是否修改成功,接下來,使用SHOWCREATEDATABASE語句查看修改后的數(shù)據(jù)庫,執(zhí)行結果如下:ALTERDATABASEitcastDEFAULTCHARACTERSET
gbkCOLLATEgbk_bin;說明itcast數(shù)據(jù)庫的編碼信息修改成功了2.1數(shù)據(jù)庫根底知識2.1.3刪除數(shù)據(jù)庫刪除數(shù)據(jù)庫是將數(shù)據(jù)庫系統(tǒng)中已經存在的數(shù)據(jù)庫刪除。成功刪除數(shù)據(jù)庫后,數(shù)據(jù)庫中的所有數(shù)據(jù)都將被去除,原來分配的空間也將被回收。在MySQL中,刪除數(shù)據(jù)庫的根本語法格式如下所示:需要注意的是,如果要刪除的數(shù)據(jù)庫不存在,那么刪除會失敗。DROPDATABASE數(shù)據(jù)庫名稱;2.1數(shù)據(jù)庫根底知識2.1.3刪除數(shù)據(jù)庫
【例2-5】刪除名稱為itcast的數(shù)據(jù)庫,SQL語句如下所示:為了驗證刪除數(shù)據(jù)庫的操作是否成功,接下來,使用SHOWDATABASES語句查看已經存在的數(shù)據(jù)庫,執(zhí)行結果如下所示:DROPDATABASEitcast;2.2數(shù)據(jù)類型2.2.1整數(shù)類型根據(jù)數(shù)值取值范圍的不同,MySQL中的整數(shù)類型可分為5種,分別是TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,表2-1列舉了MySQL不同整數(shù)類型所對應的字節(jié)大小和取值范圍。從表2-1中可以看出,不同整數(shù)類型所占用的字節(jié)數(shù)和取值范圍都是不同的。數(shù)據(jù)類型字節(jié)數(shù)無符號數(shù)的取值范圍有符號數(shù)的取值范圍TINYINT10~255-128~127SMALLINT20~65535-32768~32768MEDIUMINT30~16777215-8388608~8388608INT40~4294967295-2147483648~2147483648BIGINT80~18446744073709551615-9223372036854775808~9223372036854775808表2-1MySQL整數(shù)類型2.2數(shù)據(jù)類型2.2.2浮點數(shù)類型和定點數(shù)類型在MySQL數(shù)據(jù)庫中,存儲的小數(shù)都是使用浮點數(shù)和定點數(shù)來表示的。浮點數(shù)的類型有兩種,分別是單精度浮點數(shù)類型〔FLOAT〕和雙精度浮點類型〔DOUBLE〕。而定點數(shù)類型只有DECIMAL類型。表2-2列舉了MySQL中浮點數(shù)和定點數(shù)類型所對應的字節(jié)大小及其取值范圍。表2-2MySQL浮點數(shù)和定點數(shù)類型2.2數(shù)據(jù)類型2.2.3日期與時間類型為了方便在數(shù)據(jù)庫中存儲日期和時間,MySQL提供了表示日期和時間的數(shù)據(jù)類型,分別是YEAR、DATE、TIME、DATETIME和TIMESTAMP,表2-3列舉了這些MySQL中日期和時間數(shù)據(jù)類型所對應的字節(jié)數(shù)、取值范圍、日期格式以及零值。表2-3MySQL日期和時間類型2.2數(shù)據(jù)類型2.2.3日期與時間類型需要注意的是,如果插入的數(shù)值不合法,系統(tǒng)會自動將對應的零值插入數(shù)據(jù)庫中。為了大家更好地學習日期和時間類型,接下來,將表2-3中的類型進行詳細講解,具體如下:1、YEAR類型YEAR類型用于表示年份,在MySQL中,可以使用以下三種格式指定YEAR類型的值:〔1〕使用4位字符串或數(shù)字表示,范圍為‘1901’~‘2155’或1901~2155。2.2數(shù)據(jù)類型2.2.3日期與時間類型〔2〕使用2位字符串表示,范圍為‘00’~‘99’〔3〕使用2位數(shù)字表示,范圍為1~99需要注意的是,當使用YEAR類型時,一定要區(qū)分'0'和0。因為字符串格式的'0'表示的是YEAR值是2000,而數(shù)字格式的0表示的YEAR值是0000。2.2數(shù)據(jù)類型2.2.3日期與時間類型2、DATE類型DATE類型用于表示日期值,不包含時間局部。在MySQL中,可以使用以下四種格式指定DATE類型的值:〔1〕以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示?!?〕以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示?!?〕以YY-MM-DD或者YYMMDD數(shù)字格式表示?!?〕使用CURRENT_DATE或者NOW()表示當前系統(tǒng)日期。2.2數(shù)據(jù)類型2.2.3日期與時間類型3、TIME類型TIME類型用于表示時間值,它的顯示形式一般為HH:MM:SS,其中,HH表示小時,MM表示分,SS表示秒。在MySQL中,可以使用以下三種格式指定TIME類型的值:〔1〕以‘DHH:MM:SS’字符串格式表示?!?〕以‘HHMMSS’字符串格式或者HHMMSS數(shù)字格式表示?!?〕使用CURRENT_TIME或NOW()輸入當前系統(tǒng)時間。2.2數(shù)據(jù)類型2.2.3日期與時間類型4、DATETIME類型DATETIME類型用于表示日期和時間,它的顯示形式為‘YYYY-MM-DDHH:MM:SS’,其中,YYYY表示年,MM表示月,DD表示日,HH表示小時,MM表示分,SS表示秒。在MySQL中,可以使用以下四種格式指定DATETIME類型的值:〔1〕以‘YYYY-MM-DDHH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的日期和時間,取值范圍為‘1000-01-0100:00:00’~‘9999-12-323:59:59’。2.2數(shù)據(jù)類型2.2.3日期與時間類型〔2〕以‘YY-MM-DDHH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期和時間,其中YY表示年,取值范圍為‘00’~‘99’。〔3〕以YYYYMMDDHHMMSS或者YYMMDDHHMMSS數(shù)字格式表示的日期和時間。〔4〕使用NOW來輸入當前系統(tǒng)的日期和時間。2.2數(shù)據(jù)類型2.2.3日期與時間類型5、TIMESTAMP類型TIMESTAMP類型用于表示日期和時間,它的顯示形式同DATETIME相同,但取值范圍比DATETIME小。下面介紹幾種TIMESTAMP類型與DATATIME類型不同的形式,具體如下:〔1〕使用CURRENT_TIMESTAMP來輸入系統(tǒng)當前日期和時間?!?〕輸入NULL時,系統(tǒng)會輸入系統(tǒng)當前日期和時間?!?〕無任何輸入時,系統(tǒng)會輸入系統(tǒng)當前日期和時間。2.2數(shù)據(jù)類型2.2.4字符串和二進制類型為了存儲字符串、圖片和聲音等數(shù)據(jù),MySQL提供了字符串和二進制類型,表2-4列舉了MySQL中的字符串和二進制類型。表2-4MySQL字符串和二進制類型數(shù)據(jù)類型類型說明CHAR用于表示固定長度的字符串
VARCHAR用于表示可變長度的字符串BINARY用于表示固定長度的二進制數(shù)據(jù)VARBINARY用于表示可變長度的二進制數(shù)據(jù)BOLB用于表示二進制大數(shù)據(jù)TEXT用于表示大文本數(shù)據(jù)ENUM表示枚舉類型,只能存儲一個枚舉字符串值SET表示字符串對象,可以有零或多個值BIT表示位字段類型2.2數(shù)據(jù)類型2.2.4字符串和二進制類型表2-4列舉的字符串和二進制類型中,不同數(shù)據(jù)類型具有不同的特點,接下來,針對這些數(shù)據(jù)類型進行詳細地講解,具體如下:1、CHAR和VARCHAR類型CHAR和VARCHAR類型都用來表示字符串數(shù)據(jù),不同的是,VARCHAR可以存儲可變長度的字符串。在MySQL中,定義CHAR和VARCHAR類型的方式如下所示:在上述定義方式中,M指的是字符串的最大長度。CHAR(M)或VARCHAR(M)2.2數(shù)據(jù)類型2.2.4字符串和二進制類型為了幫助大家更好地理解CHAR和VARCHAR之間的區(qū)別,接下來,以CHAR(4)和VARCHAR(4)為例進行說明,具體如表2-5所示。從表2-5中可以看出,當數(shù)據(jù)為CHAR(4)類型時,不管插入值的長度是多少,所占用的存儲空間都是4個字節(jié),而VARCHAR(4)所對應的數(shù)據(jù)所占用的字節(jié)數(shù)為實際長度加1。表2-5CHAR(4)和VARCHAR(4)比照插入值CHAR(4)存儲需求VARCHAR(4)存儲需求‘’‘’4個字節(jié)‘’1個字節(jié)‘ab’‘ab’4個字節(jié)‘ab’3個字節(jié)‘abc’‘abc’4個字節(jié)‘abc’4個字節(jié)‘abcd’‘abcd’4個字節(jié)‘abcd’5個字節(jié)‘abcdef’‘abcd’4個字節(jié)‘abcd’5個字節(jié)2.2數(shù)據(jù)類型2.2.4字符串和二進制類型2、BINARY和VARBINARY類型BINARY和VARBINARY類型類似于CHAR和VARCHAR,不同的是,它們所表示的是二進制數(shù)據(jù)。定義BINARY和VARBINARY類型的方式如下所示:需要注意的是,BINARY類型的長度是固定的,如果數(shù)據(jù)的長度缺乏最大長度,將在數(shù)據(jù)的后面用“\0〞補齊,最終到達指定長度。BINARY(M)或VARBINARY(M)2.2數(shù)據(jù)類型2.2.4字符串和二進制類型3、TEXT類型TEXT類型用于表示大文本數(shù)據(jù),例如,文章內容、評論等,它的類型分為四種,具體如表2-6所示。表2-6TEXT類型數(shù)據(jù)類型存儲范圍TINYTEXT0~255字節(jié)TEXT0~65535字節(jié)MEDIUMTEXT0~16777215字節(jié)LONGTEXT0~4294967295字節(jié)2.2數(shù)據(jù)類型2.2.4字符串和二進制類型4、BLOB類型BLOB類型是一種特殊的二進制類型,它用于表示數(shù)據(jù)量很大的二進制數(shù)據(jù),例如圖片、PDF文檔等。BLOB類型分為四種,具體如表2-7所示。需要注意的是,BLOB類型與TEXT類型很相似,但BLOB類型數(shù)據(jù)是根據(jù)二進制編碼進行比較和排序,而TEXT類型數(shù)據(jù)是根據(jù)文本模式進行比較和排序。表2-7BLOB類型數(shù)據(jù)類型存儲范圍TINYBLOB0~255字節(jié)BLOB0~65535字節(jié)MEDIUMBLOB0~16777215字節(jié)LONGBLOB0~4294967295字節(jié)2.2數(shù)據(jù)類型2.2.4字符串和二進制類型5、ENUM類型ENUM類型又稱為枚舉類型。定義ENUM類型的數(shù)據(jù)格式如下所示:在上述格式中,('值1','值2','值3'……'值n')稱為枚舉列表,ENUM類型的數(shù)據(jù)只能從枚舉列表中取,并且只能取一個。需要注意的是,枚舉列舉中的每個值都有一個順序編號,MySQL中存入的就是這個順序編號,而不是列表中的值。ENUM('值1','值2','值3'……'值n')2.2數(shù)據(jù)類型2.2.4字符串和二進制類型6、SET類型SET類型用于表示字符串對象,它的值可以有零個或多個,SET類型數(shù)據(jù)的定義格式與ENUM類型類似,具體語法格式如下所示:
與ENUM類型相同,('值1','值2','值3'……'值n')列表中的每個值都有一個順序編號,MySQL中存入的也是這個順序編號,而不是列表中的值。SET('值1','值2','值3'……'值n')2.2數(shù)據(jù)類型2.2.4字符串和二進制類型7、BIT類型BIT類型用于表示二進制數(shù)據(jù)。定義BIT類型的根本語法格式如下所示:在上述格式中,M用于表示每個值的位數(shù),范圍為1~64。需要注意的是,如果分配的BIT(M)類型的數(shù)據(jù)長度小于M,將在數(shù)據(jù)的左邊用0補齊。BIT(M)2.3數(shù)據(jù)表的根本操作2.3.1創(chuàng)立數(shù)據(jù)表需要注意的是,在操作數(shù)據(jù)表之前,應該使用“USE數(shù)據(jù)庫名〞指定操作是在哪個數(shù)據(jù)庫中進行,否那么會拋出“Nodatabaseselected〞錯誤。創(chuàng)立數(shù)據(jù)表的根本語法格式如下所示:CREATETABLE表名(
字段名1,數(shù)據(jù)類型[完整性約束條件],字段名2,數(shù)據(jù)類型[完整性約束條件],......字段名n,數(shù)據(jù)類型[完整性約束條件],)2.3數(shù)據(jù)表的根本操作2.3.1創(chuàng)立數(shù)據(jù)表【例2-6】創(chuàng)立一個用于存儲學生成績的表tb_grade,如表2-8所示。tb_grade表的數(shù)據(jù)如表2-8所示。要想創(chuàng)立表2-8所示的數(shù)據(jù)表,需要首先創(chuàng)立一個數(shù)據(jù)庫,SQL語句如下:選擇創(chuàng)立表的數(shù)據(jù)庫,SQL語句如下:字段名稱數(shù)據(jù)類型備注說明idINT(11)學生的編號nameVARCHAR(20)學生的姓名gradeFLOAT學生的成績表2-8tb_grade表CREATEDATABASEitcast;USEitcast;2.3數(shù)據(jù)表的根本操作2.3.1創(chuàng)立數(shù)據(jù)表創(chuàng)立數(shù)據(jù)表的SQL語句如下所示:為了驗證數(shù)據(jù)表是否創(chuàng)立成功,需要使用SHOWTABLES語句進行查看,具體執(zhí)行結果如下所示:2.3數(shù)據(jù)表的根本操作2.3.2查看數(shù)據(jù)表在MySQL中,查看數(shù)據(jù)表的方式有兩種,具體如下:1、使用SHOWCREATETABLE查看數(shù)據(jù)表在MySQL中,SHOWCREATETABLE語句不僅可以查看創(chuàng)立表時的定義語句,還可以查看表的字符編碼。SHOWCREATETABLE語句的根本語法格式如下所示:在上述格式中,“表名〞指的是要查詢數(shù)據(jù)表的名稱。SHOWCREATETABLE表名;2.3數(shù)據(jù)表的根本操作2.3.2查看數(shù)據(jù)表【例2-7】使用SHOWCREATETABLE語句查看tb_grade表,SQL語句如下所示:執(zhí)行結果如下所示:SHOWCREATETABLEtb_grade;2.3數(shù)據(jù)表的根本操作2.3.2查看數(shù)據(jù)表可以在SHOWCREATETABLE語句的表名之后加上參數(shù)“\G〞,使顯示結果整齊美觀,具體執(zhí)行結果如下所示:2.3數(shù)據(jù)表的根本操作2.3.2查看數(shù)據(jù)表2、使用DESCRIBE語句查看數(shù)據(jù)表在MySQL中,使用DESCRIBE語句可以查看表的字段信息,其中包括字段名、字段類型等信息。DESCRIBE語句的根本語法格式如下所示:或簡寫為:DESCRIBE表名;DESC表名;2.3數(shù)據(jù)表的根本操作2.3.2查看數(shù)據(jù)表2、使用DESCRIBE語句查看數(shù)據(jù)表【例2-8】使用DESCRIBE語句查看tb_grade表,SQL語句如下所示:執(zhí)行結果如下所示:DESCRIBEtb_grade;2.3數(shù)據(jù)表的根本操作2.3.2查看數(shù)據(jù)表2、使用DESCRIBE語句查看數(shù)據(jù)表接下來,針對執(zhí)行結果中的不同字段進行詳細講解,具體如下:NULL:表示該列是否可以存儲NULL值。Key:表示該列是否已經編制索引。Default:表示該列是否有默認值。Extra:表示獲取到的與給定列相關的附加信息。2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表1、修改表名在數(shù)據(jù)庫中,不同的數(shù)據(jù)表是通過表名來區(qū)分的。在MySQL中,修改表名的根本語法格式如下所示:在上述格式中,“舊表名〞指的是修改前的表名,“新表名〞指的是修改后的表名,關鍵字TO是可選的,其在SQL語句中是否出現(xiàn)不會影響語句的執(zhí)行。ALTERTABLE舊表名RENAME[TO]新表名;2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表【例2-9】將數(shù)據(jù)庫itcast中的tb_grade表名改為grade表。在修改數(shù)據(jù)庫表名之前,首先使用SHOWTABLES語句查看數(shù)據(jù)庫中的所有表,執(zhí)行結果如下:上述語句執(zhí)行完畢后,使用ALTERTABLE將表名tb_grade修改為grade,SQL語句如下:ALTERTABLEtb_gradeRENAMETOgrade;2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表為了檢測表名是否修改正確,再次使用SHOWTABLES語句查看數(shù)據(jù)庫中的所有表,執(zhí)行結果如下所示:從上述執(zhí)行結果可以看出,數(shù)據(jù)庫中的tb_grade表名成功被修改為grade了。2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表2、修改字段名數(shù)據(jù)表中的字段是通過字段名來區(qū)分的。在MySQL中,修改字段名的根本語法格式如下所示:在上述格式中,“舊字段名〞指的是修改前的字段名,“新字段名〞指的是修改后的字段名,“新數(shù)據(jù)類型〞指的是修改后的數(shù)據(jù)類型。需要注意的是,新數(shù)據(jù)類型不能為空,即使新字段與舊字段的數(shù)據(jù)類型相同,也必須將新數(shù)據(jù)類型設置為與原來一樣的數(shù)據(jù)類型。ALTERTABLE表名CHANGE舊字段名
新字段名新數(shù)據(jù)類型;2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表2、修改字段名【例2-10】將數(shù)據(jù)表grade中的name字段改為username,數(shù)據(jù)類型保持不變,SQL語句如下所示:為了驗證字段名是否修改成功,通過DECS語句查看grade表的結構,執(zhí)行結果如下所示:ALTERTABLEgradeCHANGEnameusernameVARCHAR(20);2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表3、修改字段的數(shù)據(jù)類型修改字段的數(shù)據(jù)類型,就是將字段的數(shù)據(jù)類型轉為另外一種數(shù)據(jù)類型。在MySQL中修改字段數(shù)據(jù)類型的根本語法格式如下所示:在上述格式中,“表名〞指的是要修改字段所在的表名,“字段名〞指的是要修改的字段,“數(shù)據(jù)類型〞指的是修改后的字段的數(shù)據(jù)類型。ALTERTABLE表名MODIFY字段名
數(shù)據(jù)類型;2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表3、修改字段的數(shù)據(jù)類型【例2-11】將數(shù)據(jù)表grade中的id字段的數(shù)據(jù)類型由INT(11)修改為INT(20)。在執(zhí)行修改字段的數(shù)據(jù)類型之前,首先使用DESC查看grade表的結構,如下所示:2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表3、修改字段的數(shù)據(jù)類型從上述執(zhí)行結果可以看出,id字段的數(shù)據(jù)類型為INT(11)。接下來,使用ALTER語句修改id字段的數(shù)據(jù)類型,SQL語句如下所示:為了驗證id字段的數(shù)據(jù)類型是否修改成功,再次使用DECS查看grade數(shù)據(jù)表,執(zhí)行結果如下:ALTERTABLEgradeMODIFYidINT(20);被修改成了INT(20)2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表4、添加字段在MySQL中,添加字段的根本語法格式如下所示:在上述格式中,“新字段名〞為添加字段的名稱,“FIRST〞為可選參數(shù),用于將新添加的字段設置為表的第一個字段,“AFTER〞也為可選參數(shù),用于將新添加的字段添加到指定的“已存在字段名〞的后面。ALTERTABLE表名ADD新字段名
數(shù)據(jù)類型[約束條件][FIRST|AFTER已存在字段名]2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表4、添加字段【例2-12】在數(shù)據(jù)表grade中添加一個沒有約束條件的INT類型的字段age,SQL語句如下:為了驗證字段age是否添加成功,接下來,使用DESC語句查看數(shù)據(jù)表grade,執(zhí)行結果如下:ALTERTABLEgradeADDageINT(10);2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表5、刪除字段所謂刪除字段指的是將某個字段從表中刪除。在MySQL中,刪除字段的根本語法格式如下所示:在上述格式中,“字段名〞指的是要刪除的字段的名稱。ALTERTABLE表名DROP字段名;2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表5、刪除字段【例2-13】刪除grade表中的age字段,SQL語句如下:為了驗證age字段是否刪除,接下來,使用DESC語句查看grade表,執(zhí)行結果如下:從上述執(zhí)行結果可以看出,grade表中已經不存在age字段,說明age字段被成功刪除了。ALTERTABLEgradeDROPage;2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表6、修改字段的排列位置在MySQL中,修改字段排列位置的根本語法格式如下:在上述格式中,“字段名1〞指的是修改位置的字段,“數(shù)據(jù)類型〞指的是字段1的數(shù)據(jù)類型,“FIRST〞為可選參數(shù),指的是將字段1修改為表的第一個字段,“AFTER字段名2〞是將字段1插入到字段2的后面。ALTERTABLE表名MODIFY字段名1數(shù)據(jù)類型FIRST|AFTER字段名22.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表6、修改字段的排列位置【例2-14】將數(shù)據(jù)表grade的username字段修改為表的第一個字段,執(zhí)行的SQL語句如下:為了驗證username字段是否修改為表的第一個字段,接下來,使用DESC語句查看數(shù)據(jù)表,執(zhí)行結果如下:ALTERTABLEgradeMODIFYusernameVARCHAR(20)FIRST;username字段為表的第一個字段,說明username字段的排列位置被成功修改了。2.3數(shù)據(jù)表的根本操作2.3.3修改數(shù)據(jù)表6、修改字段的排列位置【例2-15】將數(shù)據(jù)表grade的id字段插入grade字段后面,執(zhí)行的SQL語句如下:為了驗證id字段是否插入到grade字段后面,接下來,使用DESC語句查看數(shù)據(jù)表,執(zhí)行結果如下:ALTERTABLEgradeMODIFYidINT(20)AFTERgrade;id字段位于grade字段后面,說明id字段的排列位置被成功修改了。2.3數(shù)據(jù)表的根本操作2.3.4刪除數(shù)據(jù)表刪除數(shù)據(jù)表是指刪除數(shù)據(jù)庫中已存在的表,在刪除數(shù)據(jù)表的同時,數(shù)據(jù)表中存儲的數(shù)據(jù)都將被刪除。在MySQL中,直接使用DROPTABLE語句就可以刪除沒有被其它表關聯(lián)的數(shù)據(jù)表,其根本的語法格式如下所示:在上述格式中,“表名〞指的是要刪除的數(shù)據(jù)表。DROPTABLE表名;2.3數(shù)據(jù)表的根本操作2.3.4刪除數(shù)據(jù)表【例2-16】刪除數(shù)據(jù)表grade,SQL語句如下:為了驗證數(shù)據(jù)表grade是否被刪除成功,使用DESC語句查看數(shù)據(jù)表,執(zhí)行結果如下:從上述結果可以看出,grade表已經不存在了,說明數(shù)據(jù)表grade被成功刪除了。DROPTABLEgrade;2.4表的約束為了防止數(shù)據(jù)表中插入錯誤的數(shù)據(jù),在MySQL中,定義了一些維護數(shù)據(jù)庫完整性的規(guī)那么,即表的約束。表2-9列舉了常見的表的約束。表2-9列舉的約束條件都是針對表中字段進行限制,從而保證數(shù)據(jù)表中數(shù)據(jù)的正確性和唯一性。約束條件說明PRIMARYKEY主鍵約束,用于唯一標識對應的記錄FOREIGNKEY外鍵約束NOTNULL非空約束UNIQUE唯一性約束
DEFAULT默認值約束,用于設置字段的默認值表2-9表的約束2.4表的約束
主鍵約束在MySQL中,為了快速查找表中的某條信息,可以通過設置主鍵來實現(xiàn)。主鍵約束是通過PRIMARYKEY定義的,它可以唯一標識表中的記錄,這就好比身份證可以用來標識人的身份一樣。在MySQL中,主鍵約束分為兩種,具體如下:1、單字段主鍵2、多字段主鍵2.4表的約束主鍵約束1、單字段主鍵單字段主鍵指的是由一個字段構成的主鍵,其根本的語法格式如下所示:【例2-17】創(chuàng)立一個數(shù)據(jù)表example01,并設置id作為主鍵,SQL語句如下:上述SQL語句執(zhí)行后,example01表中創(chuàng)立了id、name和grade三個字段,其中,id字段是主鍵。字段名數(shù)據(jù)類型PRIMARYKEY2.4表的約束2.4.1主鍵約束2、多字段主鍵多字段主鍵指的是多個字段組合而成的主鍵,其根本的語法格式如下所示:【例2-18】創(chuàng)立一個數(shù)據(jù)表example02,在表中將stu_id和course_id兩個字段共同作為主鍵,SQL語句如下:PRIMARYKEY(字段名1,字段名2,……字段名n)需要注意的是:每個數(shù)據(jù)表中最多只能有一個主鍵約束,定義為PRIMARYKEY的字段不能有重復值且不能為NULL值。stu_id和course_id兩個字段組合可以唯一確定一條記錄2.4表的約束2.4.2非空約束非空約束指的是字段的值不能為NULL,在MySQL中,非空約束是通過NOTNULL定義的,其根本的語法格式如下所示:【例2-19】創(chuàng)立一個數(shù)據(jù)表example04,將表中的name字段設置為非空約束,SQL語句如下:需要注意的是,在同一個數(shù)據(jù)表中可以定義多個非空字段。字段名數(shù)據(jù)類型NOTNULL;2.4表的約束2.4.3唯一約束唯一約束用于保證數(shù)據(jù)表中字段的唯一性,即表中字段的值不能重復出現(xiàn)。唯一約束是通過UNIQUE定義的,其根本的語法格式如下所示:【例2-20】創(chuàng)立一個數(shù)據(jù)表example05,將表中的stu_id設置為唯一約束,SQL語句如下:字段名數(shù)據(jù)類型UNIQUE;2.4表的約束2.4.4默認約束默認約束用于給數(shù)據(jù)表中的字段指定默認值,即當在表中插入一條新記錄時,如果沒有給這個字段賦值,那么,數(shù)據(jù)庫系統(tǒng)會自動為這個字段插入默認值。默認值是通過DEFAULT關鍵字定義的。默認約束根本的語法格式如下所示:【例2-21】創(chuàng)立一個數(shù)據(jù)表example06,將表中的grade字段的默認值設置為0,SQL語句如下:字段名數(shù)據(jù)類型DEFAULT默認值;2.5設置表的字段值
自動增加在數(shù)據(jù)表中,假設想為表中插入的新記錄自動生成唯一的ID,可以使用AUTO_INCREMENT約束來實現(xiàn)。AUTO_INCREMENT約束的字段可以是任何整數(shù)類型。默認情況下,該字段的值是從1開始自增的。使用AUTO_INCREMENT設置表字段值自動增加的根本語法格式如下所示:【例2-22】創(chuàng)立一個數(shù)據(jù)表example05,將表中的id字段設置為自動增加,SQL語句如下:字段名數(shù)據(jù)類型AUTO_INCREMENT;2.6索引2.6.1索引的概念數(shù)據(jù)庫的索引好比新華字典的音序表,它是對數(shù)據(jù)庫表中一列或多列的值進行排序后的一種結構,其作用就是提高表中數(shù)據(jù)的查詢速度。MySQL中的索引分為很多種,具體如下:1、普通索引2、唯一性索引3、全文索引4、單列索引5、多列索引6、空間索引2.6索引2.6.2創(chuàng)立索引創(chuàng)立索引的方式有三種,具體如下:一、創(chuàng)立表的時候創(chuàng)立索引二、使用CREATEINDEX語句在已經存在的表上創(chuàng)立索引三、使用ALTERTABLE語句在已經存在表上創(chuàng)立索引2.6索引2.6.2創(chuàng)立索引一、創(chuàng)立表的時候創(chuàng)立索引關于上述語法的相關解釋具體如下:UNIQUE:可選參數(shù),表示唯一性約束FULLTEXT:可選參數(shù),表示全文約束SPATIAL:可選參數(shù),表示空間約束INDEX和KEY:用來表示字段的索引,二者選一即可別名:可選參數(shù),表示創(chuàng)立的索引的名稱字段名1:指定索引對應字段的名稱長度:可選參數(shù),用于表示索引的長度ASC和DESC:可選參數(shù),其中,ASC表示升序排列,DESC表示降序排列CREATETABLE表名〔字段名數(shù)據(jù)類型[完整性約束條件],字段名數(shù)據(jù)類型[完整性約束條件],......字段名數(shù)據(jù)類型[UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY[別名](字段名1[(長度)])[ASC|DESC]));2.6索引2.6.2創(chuàng)立索引一、創(chuàng)立表的時候創(chuàng)立索引為了幫助大家更好地了解如何在創(chuàng)立表的時候創(chuàng)立索引,接下來,通過具體的案例,分別對MySQL中的6種索引類型進行講解,具體如下:1、創(chuàng)立普通索引【例2-23】在t1表中id字段上建立索引,SQL語句如下:2.6索引2.6.2創(chuàng)立索引1、創(chuàng)立普通索引上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:為了查看索引是否被使用,可以使用EXPLAIN語句進行查看,SQL代碼如下:EXPLAINSELECT*FROMt1WHEREid=1\GSHOWCREATETABLEt1\G2.6索引2.6.2創(chuàng)立索引2、創(chuàng)立唯一性索引【例2-24】創(chuàng)立一個表名為t2的表,在表中的id字段上建立索引名為unique_id的唯一性索引,并且按照升序排列,SQL語句如下:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:SHOWCREATETABLEt2\G2.6索引2.6.2創(chuàng)立索引3、創(chuàng)立全文索引【例2-25】創(chuàng)立一個表名為t3的表,在表中的name字段上建立索引名為fulltext_name的全文索引,SQL語句如下:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:SHOWCREATETABLEt3\G2.6索引2.6.2創(chuàng)立索引4、創(chuàng)立單列索引【例2-26】創(chuàng)立一個表名為t4的表,在表中的name字段上建立索引名為single_name的單列索引,SQL語句如下:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:SHOWCREATETABLEt4\G2.6索引2.6.2創(chuàng)立索引5、創(chuàng)立多列索引【例2-27】創(chuàng)立一個表名為t5的表,在表中的id和name字段上建立索引名為multi的多列索引,SQL語句如下:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:SHOWCREATETABLEt5\G2.6索引2.6.2創(chuàng)立索引5、創(chuàng)立多列索引需要注意的是,在多列索引中,只有查詢條件中使用了這些字段中的第一個字段時,多列索引才會被使用。為了驗證這個說法是否正確,將id字段作為查詢條件,通過EXPLAIN語句查看索引的使用情況,SQL代碼如下所示:如果只使用name字段作為查詢條件,SQL代碼如下所示:EXPLAINSELECT*FROMt5WHEREid=1\GEXPLAINSELECT*FROMt5WHEREname='Mike'\G2.6索引2.6.2創(chuàng)立索引6、創(chuàng)立空間索引【例2-28】創(chuàng)立一個表名為t6的表,在空間類型為GEOMETRY的字段上創(chuàng)立空間索引,SQL語句如下:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:需要注意的是,創(chuàng)立空間索引時,所在字段的值不能為空值,并且表的存儲引擎為MyISAM。SHOWCREATETABLEt6\G2.6索引2.6.2創(chuàng)立索引二、使用CREATEINDEX語句在已經存在的表上創(chuàng)立索引假設想在一個已經存在的表上創(chuàng)立索引,可以使用CREATEINDEX語句,CREATEINDEX語句創(chuàng)立索引的具體語法格式如下所示:在上述語法格式中,UNIQUE、FULLTEXT和SPATIAL都是可選參數(shù),分別用于表示唯一性索引、全文索引和空間索引。INDEX用于指明字段為索引。CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEX索引名ON表名(字段名[(長度)][ASC|DESC]);2.6索引2.6.2創(chuàng)立索引為了便于大家學習如何使用CREATEINDEX語句在已經存在的表上創(chuàng)立索引,接下來,創(chuàng)立一個book表,該表中沒有建立任何索引,創(chuàng)立book表的SQL語句如下所示:創(chuàng)立好數(shù)據(jù)表book后,通過具體的案例為大家演示如何使用CREATINDEX語句在已存在的數(shù)據(jù)表中創(chuàng)立索引,具體如下:CREATETABLEbook(
bookidINTNOTNULL,
booknameVARCHAR(255)NOTNULL,
authorsVARCHAR(255)NOTNULL,
infoVARCHAR(255)NULL,
commentVARCHAR(255)NULL,
publicyearYEARNOTNULL);2.6索引2.6.2創(chuàng)立索引1、創(chuàng)立普通索引【例2-29】在book表中的bookid字段上建立一個名稱為index_id的普通索引,SQL語句如下所示:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:CREATEINDEXindex_idONbook(bookid);SHOWCREATETABLEbook\G2.6索引2.6.2創(chuàng)立索引2、創(chuàng)立唯一性索引【例2-30】在book表中的bookid字段上建立一個名稱為uniqueidx的唯一性索引,SQL語句如下所示:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:CREATEUNIQUEINDEXuniqueidxONbook(bookid);SHOWCREATETABLEbook\G2.6索引2.6.2創(chuàng)立索引3、創(chuàng)立單列索引【例2-31】在book表中的comment字段上建立一個名稱為singleidx的單列索引,SQL語句如下所示:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:CREATEINDEXsingleidxONbook(comment);SHOWCREATETABLEbook\G2.6索引2.6.2創(chuàng)立索引4、創(chuàng)立多列索引【例2-32】在book表中的authors和info字段上建立一個名稱為mulitidx的多列索引,SQL語句如下所示:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:CREATEINDEXmulitidxONbook(authors(20),info(20));SHOWCREATETABLEbook\G2.6索引2.6.2創(chuàng)立索引5、創(chuàng)立全文索引【例2-33】刪除表book,重新創(chuàng)立表book,在表中的info字段上創(chuàng)立全文索引。首先刪除表book,SQL語句如下:然后重新創(chuàng)立表book,SQL語句如下:DROPTABLEbook;2.6索引2.6.2創(chuàng)立索引5、創(chuàng)立全文索引使用CREATEINDEX語句在book表的info字段上創(chuàng)立名稱為fulltextidx的全文索引,SQL語句如下:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代碼如下:CREATEFULLTEXTINDEXfulltextidxONbook(info);SHOWCREATETABLEbook\G2.6索引2.6.2創(chuàng)立索引6、創(chuàng)立空間索引【例2-34】創(chuàng)立表t7,在表中的g字段上創(chuàng)立名稱為spatidx的空間索引。首先創(chuàng)立數(shù)據(jù)表t7,SQL語句如下:使用CREATEINDEX語句在t7表的g字段上創(chuàng)立名稱為spatidx的空間索引,SQL語句如下:為了驗證空間索引spatidx是否創(chuàng)立成功,使用SHOWCREATETABLE語句查看表的結構,結果如下所示:CREATETABLEt7(gGEOMETRYNOTNULL)ENGINE=MyISAM;CREATESPATIALINDEXspatidxONt7(g);SHOWCREATETABLEt7\G2.6索引2.6.2創(chuàng)立索引三、使用ALTERTABLE語句在已經存在表上創(chuàng)立索引在已經存在的表中創(chuàng)立索引,除了可以使用CREATEINDEX語句外,還可以使用ALTERTABLE語句。使用ALTERTABLE語句在已經存在表上創(chuàng)立索引的語法格式如下所示:在上述語法格式中,UNIQUE、FULLTEXT和SPATIAL都是可選參數(shù),分別用于表示唯一性索引、全文索引和空間索引,ADD表示向表中添加字段。ALTERTABLE表名ADD[UNIQUE|FULLTEXT|SPATIAL]INDEX索引名(字段名[(長度)][ASC|DESC])2.6索引2.6.2創(chuàng)立索引接下來,同樣以book表為例,對不同類型的索引進行詳細講解。為了使book表不包含任何索引,我們首先刪除表book,SQL語句如下:然后重新建立表book,SQL語句如下:創(chuàng)立好數(shù)據(jù)表book后,就可以使用ALTERTABLE語句在已存在的數(shù)據(jù)表中創(chuàng)立索引了,具體如下:DROPTABLEbook;2.6索引2.6.2創(chuàng)立索引1、創(chuàng)立普通索引【例2-35】在表中的bookid字段上創(chuàng)立名稱為index_id的普通索引,SQL語句如下:上述SQL語句執(zhí)行后,使用SHOWCREATETABLE語句查看表的結構,SQL代
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025太陽能槽式復合拋物面聚光集熱土壤儲熱技術
- 個人勞動法權益保障合同
- 個人抵押借款擔保合同
- 分期付款購買機動車合同書
- 醫(yī)療器械藥品購銷合同
- 醫(yī)院場地租賃合同書樣本
- 五金電器銷售合同6篇
- 2025年紅河b2貨運上崗證模擬考試
- 合同范本銷售人員聘用合同7篇
- 面板自動檢測機競爭策略分析報告
- 中建分供方資源管理辦法
- (人教PEP2024版)英語一年級上冊Unit 3 教學課件(新教材)
- 小小演說家演講技巧教學設計
- 住院患者跌倒、墜床、壓力性損傷的風險評估及管理
- 2024移動電源車運維管理技術規(guī)范柴油機類
- 2024年中國端側大模型行業(yè)研究:算力優(yōu)化與效率革命+如何重塑行業(yè)生態(tài)-22正式版
- 學校臨聘人員規(guī)范管理自查報告
- (高清版)DB37T 5271-2024 建設工程造價指標采集與發(fā)布標準
- 投訴法官枉法裁判范本
- 食材配送服務方案投標方案(技術方案)
- 新能源充電樁安全管理與防護
評論
0/150
提交評論