




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章MySQL表結(jié)構(gòu)管理主要內(nèi)容5.1表的概念5.2MySQL的數(shù)據(jù)類(lèi)型5.3創(chuàng)建表5.4定義約束5.5使用Workbench創(chuàng)建表5.6查看表5.7修改表5.8刪除表5.9本章小結(jié)5.1表的概念表(Table)是關(guān)系數(shù)據(jù)庫(kù)中最重要的數(shù)據(jù)庫(kù)對(duì)象,用來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。一個(gè)數(shù)據(jù)庫(kù)包含一個(gè)或多個(gè)表,表由行(Row)和列(Column)組成。表中的一行稱(chēng)為一個(gè)記錄(Record),每個(gè)表包含若干行數(shù)據(jù)。列又稱(chēng)為字段(Field),由數(shù)據(jù)類(lèi)型、長(zhǎng)度、是否允許空值、默認(rèn)值等組成,每個(gè)列表示記錄的一個(gè)屬性。一個(gè)完整的表包含表結(jié)構(gòu)和表數(shù)據(jù)兩部分內(nèi)容,表的結(jié)構(gòu)主要包括表的列名、數(shù)據(jù)類(lèi)型、長(zhǎng)度、是否允許空值、默認(rèn)值以及約束等,表數(shù)據(jù)就是表中的記錄。例如,“教務(wù)管理系統(tǒng)”數(shù)據(jù)庫(kù)中的學(xué)生表的結(jié)構(gòu)和部分?jǐn)?shù)據(jù)如表5.1和表5.2所示。5.1表的概念表5.1學(xué)生(student)表結(jié)構(gòu)列名數(shù)據(jù)類(lèi)型長(zhǎng)度允許空值默認(rèn)值約束說(shuō)明snochar11否
主鍵學(xué)生編號(hào)snamevarchar10否
學(xué)生姓名ssexchar1否男只能取'男'或'女'性別sbirthdaydate
否
出生日期snationvarchar10否
民族mnochar4是
外鍵,參照major表的mno列專(zhuān)業(yè)編號(hào)5.1表的概念表5.2學(xué)生(student)表數(shù)據(jù)snosnamessexsbirthdaysnationmno20190101001劉麗女2001-3-2漢族010120190101002張林男2000-9-12漢族010120190102001李宏男2001-8-29回族010220200102001孫明男2001-10-18漢族010220200102002趙均男2000-12-19漢族010220200101001張莉女2001-6-20漢族010120210201001牛偉男2003-9-18回族02015.2MySQL的數(shù)據(jù)類(lèi)型定義表時(shí)需要對(duì)表中的列進(jìn)行屬性設(shè)置,包括列的名稱(chēng)、數(shù)據(jù)類(lèi)型、長(zhǎng)度、默認(rèn)值等,其中最重要的屬性就是數(shù)據(jù)類(lèi)型。數(shù)據(jù)類(lèi)型是指存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)的類(lèi)型,決定了數(shù)據(jù)的存儲(chǔ)格式和取值范圍。MySQL中的數(shù)據(jù)類(lèi)型主要包括數(shù)值類(lèi)型、字符串類(lèi)型、日期和時(shí)間類(lèi)型、空間類(lèi)型和JSON類(lèi)型。本書(shū)主要介紹數(shù)值類(lèi)型、字符串類(lèi)型、日期和時(shí)間類(lèi)型。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.1數(shù)值類(lèi)型整數(shù)類(lèi)型整數(shù)類(lèi)型包括TINYINT、INTEGER(或INT)、SMALLINT、MEDIUMINT和BIGINT。數(shù)據(jù)類(lèi)型存儲(chǔ)字節(jié)數(shù)無(wú)符號(hào)數(shù)取值范圍有符號(hào)數(shù)取值范圍TINYINT10~255-128~127SMALLINT20~65535-32768~32767MEDIUMINT30~16777215-8388608~8388607INTEGER(或INT)40~4294967295-2147483648~2147483647BIGINT80~264-1-263~263-15.2MySQL的數(shù)據(jù)類(lèi)型5.2.1數(shù)值類(lèi)型定點(diǎn)數(shù)類(lèi)型定點(diǎn)數(shù)類(lèi)型包括DECIMAL和NUMERIC,用于存儲(chǔ)精確的數(shù)值數(shù)據(jù)。在MySQL中,NUMERIC被實(shí)現(xiàn)為DECIMAL。定點(diǎn)數(shù)類(lèi)型的定義語(yǔ)法為DECIMAL(M,D)或NUMERIC(M,D),其中M是最大位數(shù)(精度),范圍是1到65,D是小數(shù)點(diǎn)后的位數(shù)(小數(shù)位數(shù)),它的范圍是0到30,并且不能大于M。如果D省略,則默認(rèn)為0,如果M省略,則默認(rèn)為10。例如,定義salary列的數(shù)據(jù)類(lèi)型為DECIMAL(5,2),則該列能夠存儲(chǔ)具有五位數(shù)字和兩位小數(shù)的任何值,因此salary列的取值范圍從-999.99到999.99。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.1數(shù)值類(lèi)型浮點(diǎn)數(shù)類(lèi)型浮點(diǎn)數(shù)類(lèi)型包括單精度FLOAT類(lèi)型和雙精度DOUBLE類(lèi)型,代表近似的數(shù)據(jù)值。MySQL對(duì)單精度值使用四個(gè)字節(jié)存儲(chǔ),對(duì)雙精度值使用八個(gè)字節(jié)存儲(chǔ)。對(duì)于FLOAT,MySQL支持在關(guān)鍵字FLOAT之后指定可選的精度,但是FLOAT(p)中的精度值僅用于確定存儲(chǔ)大小,0到23之間的精度將產(chǎn)生一個(gè)4字節(jié)的單精度浮點(diǎn)列。從24到53的精度將產(chǎn)生一個(gè)8字節(jié)的雙精度浮點(diǎn)列。由于浮點(diǎn)值是近似值,而不是存儲(chǔ)為精確值,因此在比較中嘗試將其視為精確值可能會(huì)導(dǎo)致問(wèn)題。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.1數(shù)值類(lèi)型位值類(lèi)型位數(shù)據(jù)類(lèi)型用于存儲(chǔ)位值,BIT(M)允許存儲(chǔ)一個(gè)長(zhǎng)度為M的位值,M的范圍從1到64。要指定位值,可以使用b'值'表示法。值是使用0和1組成的二進(jìn)制值。例如,b'111'和b'10000000'分別表示7和128。如果給一個(gè)BIT(M)列賦值一個(gè)長(zhǎng)度小于M的位值,則該值在左側(cè)用零填充。例如,將b'101'賦值給類(lèi)型為BIT(6)的列實(shí)際上與b'000101'相同。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.2字符串類(lèi)型字符串?dāng)?shù)據(jù)類(lèi)型包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET類(lèi)型數(shù)據(jù)類(lèi)型存儲(chǔ)字節(jié)CHAR(M)M×
w字節(jié),0<=
M
<=255,其中w是字符集中最大長(zhǎng)度字符所需的字節(jié)數(shù)。BINARY(M)M字節(jié),0
<=
M
<=255VARCHAR(M),
VARBINARY(M)如果列值需要0?255個(gè)字節(jié),則L+1個(gè)字節(jié),如果值可能需要超過(guò)255個(gè)字節(jié),則L+2個(gè)字節(jié)TINYBLOB,
TINYTEXTL+1個(gè)字節(jié),其中
L<2
8BLOB,
TEXTL+2個(gè)字節(jié),其中
L<2
16MEDIUMBLOB,
MEDIUMTEXTL+3個(gè)字節(jié),其中
L<2
24LONGBLOB,
LONGTEXTL+4個(gè)字節(jié),其中
L<2
32ENUM('value1','value2',...)1或2個(gè)字節(jié),取決于枚舉值的數(shù)量(最多65,535個(gè)值)SET('value1','value2',...)1、2、3、4或8個(gè)字節(jié),取決于集合成員的數(shù)量(最多64個(gè)成員)5.2MySQL的數(shù)據(jù)類(lèi)型5.2.2字符串類(lèi)型CHAR和VARCHAR類(lèi)型使用CHAR和VARCHAR定義列時(shí)需要聲明長(zhǎng)度,該長(zhǎng)度表示要存儲(chǔ)的最大字符數(shù)。例如,CHAR(30)最多可以容納30個(gè)字符。CHAR列的長(zhǎng)度固定為聲明的長(zhǎng)度。長(zhǎng)度可以是0到255之間的任意值。存儲(chǔ)時(shí),會(huì)使用空格右填充到指定的長(zhǎng)度。VARCHAR列中的值是可變長(zhǎng)度字符串。長(zhǎng)度可以指定為0到65535之間的值。VARCHAR的有效最大長(zhǎng)度取決于最大行大小(65535字節(jié))和使用的字符集。VARCHAR值在存儲(chǔ)時(shí)不進(jìn)行填充,在存儲(chǔ)和檢索值時(shí)保留尾隨空格。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.2字符串類(lèi)型CHAR和VARCHAR類(lèi)型VARCHAR值存儲(chǔ)為1字節(jié)或2字節(jié)長(zhǎng)度前綴加數(shù)據(jù)。長(zhǎng)度前綴表示值中的字節(jié)數(shù)。如果值不超過(guò)255字節(jié),則使用一個(gè)長(zhǎng)度字節(jié);如果值超過(guò)255字節(jié),則使用兩個(gè)長(zhǎng)度字節(jié)。對(duì)于VARCHAR列,超出列長(zhǎng)度的尾隨空格在插入之前被截?cái)嗖⑸删妗?duì)于CHAR列,都會(huì)從插入的值中截?cái)喽嘤嗟奈搽S空格。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.2字符串類(lèi)型BINARY和VARBINARY類(lèi)型BINARY和VARBINARY類(lèi)型與CHAR和VARCHAR類(lèi)似,只是它們存儲(chǔ)字節(jié)字符串而不是字符串,這意味著它們具有二進(jìn)制字符集和排序規(guī)則,比較和排序基于值中字節(jié)的數(shù)值。BINARY和VARBINARY的允許最大長(zhǎng)度與CHAR和VARCHAR的相同,只是BINARY和VARBINARY的長(zhǎng)度是以字節(jié)為單位而不是字符。存儲(chǔ)BINARY值時(shí),將使用0x00(零字節(jié))將其值右填充到指定的長(zhǎng)度,檢索時(shí),不會(huì)刪除任何尾隨字節(jié)。比較時(shí)0x00和空格是不同的,0x00排序在空格之前。對(duì)于VARBINARY,插入時(shí)不進(jìn)行填充,檢索時(shí)也不刪除字節(jié)。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.2字符串類(lèi)型BLOB和TEXT類(lèi)型BLOB是一個(gè)二進(jìn)制大對(duì)象,可以容納可變數(shù)量的數(shù)據(jù)。有四種BLOB類(lèi)型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它們的區(qū)別僅在于它們可以保存的值的最大長(zhǎng)度不同。有四種TEXT類(lèi)型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,它們對(duì)應(yīng)于四種BLOB類(lèi)型并且具有相同的最大長(zhǎng)度和存儲(chǔ)要求。TEXT值被視為非二進(jìn)制字符串(字符串)。對(duì)于TEXT和BLOB列,插入時(shí)不進(jìn)行填充,檢索時(shí)也不刪除字節(jié)。另外,BLOB和TEXT列不能有DEFAULT值。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.2字符串類(lèi)型ENUM類(lèi)型ENUM類(lèi)型又稱(chēng)為枚舉類(lèi)型,在創(chuàng)建表時(shí),使用ENUM('值1','值2',...,'值n')的形式定義一個(gè)列,該列的值只能取列表中的某一個(gè)元素。ENUM類(lèi)型的取值列表中最多只能包含65535個(gè)值。例如,性別列的定義為:ssexENUM('男','女')NOTNULL,那么該列的值可以為'男'或者'女'。使用ENUM類(lèi)型定義列時(shí),會(huì)自動(dòng)刪除成員值中的尾隨空格。如果將ENUM列聲明為允許空值,則NULL值被認(rèn)為是該列的有效值,該列的默認(rèn)值為NULL。如果將ENUM列聲明為不允許取空值(NOTNULL),則其默認(rèn)值是列表中的第一個(gè)元素。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.2字符串類(lèi)型SET類(lèi)型在創(chuàng)建表時(shí),使用SET('值1','值2',...,'值n')的形式定義的列的值可以取列表中的一個(gè)元素或者多個(gè)元素的組合。取多個(gè)元素時(shí),不同元素之間用逗號(hào)隔開(kāi)。SET類(lèi)型的取值列表最多只能有64個(gè)元素。使用SET類(lèi)型定義列時(shí),會(huì)自動(dòng)刪除成員值中的尾隨空格。插入記錄時(shí),SET列中的元素順序無(wú)關(guān)緊要,存入MySQL數(shù)據(jù)庫(kù)后,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)按照定義時(shí)的順序顯示。例如,使用SET('a','b')NOTNULL定義的列,其值可以為以下幾種情況:'a'、'b'、'a,b'。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.3日期和時(shí)間類(lèi)型日期和時(shí)間數(shù)據(jù)類(lèi)型包括DATE、TIME、DATETIME、TIMESTAMP和YEAR類(lèi)型數(shù)據(jù)類(lèi)型存儲(chǔ)字節(jié)格式取值范圍YEAR1字節(jié)YYYY1901~2155DATE3字節(jié)'YYYY-MM-DD''1000-01-01'~'9999-12-31'TIME3字節(jié)+小數(shù)秒部分存儲(chǔ)'hh:mm:ss''-838:59:59'~'838:59:59'DATETIME5字節(jié)+小數(shù)秒部分存儲(chǔ)'YYYY-MM-DDhh:mm:ss''1000-01-0100:00:00'~'9999-12-3123:59:59'TIMESTAMP4字節(jié)+小數(shù)秒部分存儲(chǔ)'YYYY-MM-DDhh:mm:ss''1970-01-0100:00:01'UTC~'2038-01-1903:14:07'UTC5.2MySQL的數(shù)據(jù)類(lèi)型5.2.3日期和時(shí)間類(lèi)型YEAR類(lèi)型YEAR類(lèi)型用于存儲(chǔ)年份值,接受4位字符串、4位數(shù)字、1位或2位字符串、1位或2位數(shù)字等幾種形式的輸入值。如果輸入值為4位字符串或4位數(shù)字,有效范圍為'1901'~'2155'或1901~2155。如果輸入值為1位或2位字符串,有效范圍為'0'~'99',MySQL將'0'~'69'轉(zhuǎn)換為2000~2069,將'70'~'99'轉(zhuǎn)換為1970~1999。如果輸入值為1位或2位數(shù)字,有效范圍為0~99,MySQL將0~69轉(zhuǎn)換為2000~2069,將70~99轉(zhuǎn)換為1970~1999。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.3日期和時(shí)間類(lèi)型TIME類(lèi)型TIME類(lèi)型用于存儲(chǔ)時(shí)間值,格式'hh:mm:ss'或'hhh:mm:ss'。其中的小時(shí)部分不僅可以表示一天中的某個(gè)時(shí)間(必須小于24小時(shí)),還可以表示經(jīng)過(guò)的時(shí)間或兩個(gè)事件之間的時(shí)間間隔(可能遠(yuǎn)遠(yuǎn)大于24小時(shí),甚至為負(fù)值)。使用TIME類(lèi)型定義列時(shí)如果指定小數(shù)位數(shù),則存儲(chǔ)小數(shù)秒部分需要額外的存儲(chǔ)空間。TIME和TIME(0)等效,使用3個(gè)字節(jié)存儲(chǔ),TIME(1)和TIME(2)使用4個(gè)字節(jié)存儲(chǔ),TIME(3)和TIME(4)使用5個(gè)字節(jié)存儲(chǔ),TIME(5)和TIME(6)使用6個(gè)字節(jié)存儲(chǔ)。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.3日期和時(shí)間類(lèi)型DATE類(lèi)型DATE類(lèi)型用于包含日期部分但不包含時(shí)間部分的值。MySQL以'YYYY-MM-DD'格式檢索并顯示日期值,支持的范圍為'1000-01-01'~'9999-12-31'。5.2MySQL的數(shù)據(jù)類(lèi)型5.2.3日期和時(shí)間類(lèi)型DATETIME和TIMESTAMP類(lèi)型DATETIME類(lèi)型和TIMESTAMP類(lèi)型用于同時(shí)包含日期和時(shí)間部分的值。DATETIME類(lèi)型支持的范圍為'1000-01-0100:00:00'到'9999-12-3123:59:59',TIMESTAMP類(lèi)型的范圍為'1970-01-0100:00:01'UTC到'2038-01-1903:14:07'UTC。MySQL將TIMESTAMP類(lèi)型值從當(dāng)前時(shí)區(qū)轉(zhuǎn)換為UTC進(jìn)行存儲(chǔ),并從UTC轉(zhuǎn)換回當(dāng)前時(shí)區(qū)進(jìn)行檢索。DATETIME或TIMESTAMP值可以包含精度高達(dá)微秒(6位)的尾部小數(shù)秒部分。DATETIME類(lèi)型值的范圍為'1000-01-0100:00:00.000000'到'9999-12-3123:59:59.999999',TIMESTAMP類(lèi)型值的范圍為'1970-01-0100:00:01.000000'到'2038-01-1903:14:07.99999'。5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表語(yǔ)法格式:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name(col_namedata_type[(n[,m])][NOTNULL|NULL][DEFAULT{literal|(expr)}][AUTO_INCREMENT][COMMENT'string'],...,[index_definition],[constraint_definition])[table_options]5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表說(shuō)明:TEMPORARY:如果使用該關(guān)鍵字,則創(chuàng)建的表為臨時(shí)表。臨時(shí)表只在當(dāng)前連接可見(jiàn),當(dāng)關(guān)閉連接時(shí),MySQL會(huì)自動(dòng)刪除表并釋放所有空間。IFNOTEXISTS:該選項(xiàng)用于防止表存在時(shí)發(fā)生錯(cuò)誤。tbl_name:要?jiǎng)?chuàng)建的表的名稱(chēng),可以使用db_name.tbl_name的方式在指定的數(shù)據(jù)庫(kù)中創(chuàng)建表。如果只有表的名稱(chēng),則在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建表。col_name:列的名稱(chēng)。data_type:列的數(shù)據(jù)類(lèi)型,參見(jiàn)5.2節(jié)中的內(nèi)容。NOTNULL|NULL:指定該列是否允許空值,默認(rèn)為NULL。5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表說(shuō)明:DEFAULT{literal|(expr)}:指定列的默認(rèn)值,默認(rèn)值可以是常量,也可以是表達(dá)式。AUTO_INCREMENT:用于定義自增列,每個(gè)表只能有一個(gè)自增列,該列的數(shù)據(jù)類(lèi)型必須是整型或浮點(diǎn)型,并且必須被索引,不能有默認(rèn)值。自增序列從1開(kāi)始。在自增列中插入NULL(建議)或0值時(shí),該列的值將設(shè)置為當(dāng)前列的最大值+1。COMMENT'string':該選項(xiàng)指定列的注釋?zhuān)铋L(zhǎng)可達(dá)1024個(gè)字符。index_definition:定義索引。constraint_definition:定義約束。5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表說(shuō)明:table_options:表的選項(xiàng),常用的選項(xiàng)有:AUTO_INCREMENT[=]value:表的初始自動(dòng)增量值;[DEFAULT]CHARACTERSET[=]charset_name:指定表的默認(rèn)字符集;ENGINE[=]engine_name:指定表的存儲(chǔ)引擎;ENCRYPTION[=]{'Y'|'N'}:?jiǎn)⒂没蚪肐nnoDB表的頁(yè)面級(jí)數(shù)據(jù)加密。5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表【例5.1】在jwgl數(shù)據(jù)庫(kù)中創(chuàng)建student表,表結(jié)構(gòu)見(jiàn)表5-1。在MySQL命令行客戶(hù)端輸入命令(本例先不考慮約束):USEjwgl;CREATETABLEstudent(snoCHAR(11)NOTNULL,snameVARCHAR(10)NOTNULL,ssexCHAR(1)NOTNULLDEFAULT'男',sbirthdayDATENOTNULL,snationVARCHAR(10)NOTNULL,mnoCHAR(4));5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表【例5.1】在jwgl數(shù)據(jù)庫(kù)中創(chuàng)建student表,表結(jié)構(gòu)見(jiàn)表5-1。5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表【例5.2】在jwgl數(shù)據(jù)庫(kù)中創(chuàng)建course表,表結(jié)構(gòu):列名數(shù)據(jù)類(lèi)型長(zhǎng)度精度允許空約束說(shuō)明cnochar3
否主鍵課程編號(hào)cnamevarchar10
否
課程名稱(chēng)ctypevarchar5
是
課程類(lèi)型cclasshourtinyint
是
課時(shí)ccreditdecimal21是
學(xué)分ctermtinyint
是1~8開(kāi)設(shè)學(xué)期5.3創(chuàng)建表5.3.1使用CREATETABLE語(yǔ)句創(chuàng)建表【例5.2】在jwgl數(shù)據(jù)庫(kù)中創(chuàng)建course表:在MySQL命令行客戶(hù)端輸入命令(本例先不考慮約束):CREATETABLEcourse(cnoCHAR(3)NOTNULL,cnameVARCHAR(10)NOTNULL,ctypeVARCHAR(5),cclasshourTINYINT,ccreditDECIMAL(2,1),ctermTINYINT);5.3創(chuàng)建表5.3.2通過(guò)復(fù)制創(chuàng)建表使用CREATETABLE…LIKE語(yǔ)句語(yǔ)法格式為:CREATETABLEnew_tblLIKEorig_tbl;說(shuō)明:該語(yǔ)句可以將源表的結(jié)構(gòu)復(fù)制到新表中,new_tbl為要?jiǎng)?chuàng)建的新表的名稱(chēng),orig_tbl為源表的名稱(chēng);新表包括源表中的列、列的屬性、默認(rèn)值、主鍵約束、唯一性約束、CHECK約束和索引的定義,外鍵約束定義不會(huì)復(fù)制到新表中;創(chuàng)建的新表為空表,不包含源表中的數(shù)據(jù)。5.3創(chuàng)建表5.3.2通過(guò)復(fù)制創(chuàng)建表使用CREATETABLE…LIKE語(yǔ)句【例5.3】在jwgl數(shù)據(jù)庫(kù)中通過(guò)復(fù)制student表結(jié)構(gòu)的方式創(chuàng)建表student_bak。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEstudent_bakLIKEstudent;5.3創(chuàng)建表5.3.2通過(guò)復(fù)制創(chuàng)建表使用CREATETABLE…SELECT語(yǔ)句語(yǔ)法格式為:CREATETABLEnew_tbl[(column_definition,[index_definition],[constraint_definition])[table_options]][AS]SELECT*FROMorig_tbl;5.3創(chuàng)建表5.3.2通過(guò)復(fù)制創(chuàng)建表使用CREATETABLE…SELECT語(yǔ)句說(shuō)明:該語(yǔ)句可以將源表的表結(jié)構(gòu)和所有記錄復(fù)制到新表中,但默認(rèn)值、約束、索引不會(huì)復(fù)制;如果CREATETABLE語(yǔ)句中定義了列的信息,則在生成的表中SELECT語(yǔ)句產(chǎn)生的列附加在這些列之后;SELECT語(yǔ)句可以是任意合法的查詢(xún)語(yǔ)句,MySQL將基于查詢(xún)結(jié)果創(chuàng)建新表。5.3創(chuàng)建表5.3.2通過(guò)復(fù)制創(chuàng)建表使用CREATETABLE…SELECT語(yǔ)句【例5.4】在jwgl數(shù)據(jù)庫(kù)中通過(guò)復(fù)制student表中“0101”專(zhuān)業(yè)的學(xué)生數(shù)據(jù)創(chuàng)建表student_computer。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEstudent_computerASSELECT*FROMstudentwheremno='0101';5.4定義約束5.4.1數(shù)據(jù)完整性與約束數(shù)據(jù)完整性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和一致性。數(shù)據(jù)完整性是為了防止錯(cuò)誤信息的輸入使得數(shù)據(jù)庫(kù)中存儲(chǔ)不符合語(yǔ)義規(guī)則的數(shù)據(jù)而造成的無(wú)效操作或者產(chǎn)生錯(cuò)誤的輸出,因此維護(hù)數(shù)據(jù)庫(kù)的完整性是非常重要的。數(shù)據(jù)完整性一般包括實(shí)體完整性、參照完整性和用戶(hù)定義的完整性。約束是實(shí)現(xiàn)數(shù)據(jù)完整性的一種重要手段。5.4定義約束5.4.1數(shù)據(jù)完整性與約束實(shí)體完整性實(shí)體完整性要求表中每一行數(shù)據(jù)必須有唯一標(biāo)識(shí),不能重復(fù)。實(shí)體完整性可以通過(guò)定義主鍵約束或唯一性約束加非空約束實(shí)現(xiàn)。例如,在jwgl數(shù)據(jù)庫(kù)的student表中,將sno列定義為主鍵,sno列不能取空值并且每一個(gè)sno值都是唯一的,每一個(gè)sno值可以唯一地標(biāo)識(shí)表中的一行數(shù)據(jù),從而保證student表的實(shí)體完整性。score表中,將sno列和cno列的組合定義為主鍵,兩列不能取空值且sno值和cno值的組合不允許重復(fù),保證score表的實(shí)體完整性。5.4定義約束5.4.1數(shù)據(jù)完整性與約束參照完整性參照完整性用于保證參照表和被參照表之間的數(shù)據(jù)一致性,可以在被參照表中定義主鍵,參照表中定義外鍵,通過(guò)主鍵和外鍵之間的對(duì)應(yīng)關(guān)系來(lái)實(shí)現(xiàn)參照完整性。參照完整性要求參照表中外鍵的值或者為空值或者必須是被參照表中主鍵的值。例如,將major表作為被參照表,表中的mno列定義為主鍵,student表作為參照表,表中的mno列定義為外鍵,major表和student表通過(guò)主鍵和外鍵之間的對(duì)應(yīng)關(guān)系實(shí)現(xiàn)參照完整性,student表中mno列的值只能取major表中mno列的值,從而保證兩個(gè)表之間的數(shù)據(jù)一致性。5.4定義約束參照完整性示例5.4定義約束5.4.1數(shù)據(jù)完整性與約束用戶(hù)定義的完整性用戶(hù)定義的完整性是指針對(duì)具體的應(yīng)用,用戶(hù)根據(jù)需要自己定義的數(shù)據(jù)必須滿足的語(yǔ)義要求。用戶(hù)定義的完整性可以通過(guò)定義默認(rèn)值、非空約束和CHECK約束來(lái)實(shí)現(xiàn)。例如,對(duì)于student表中的ssex列,規(guī)定其取值只能是'男'或'女',score表中的grade列,規(guī)定其取值在0到100之間。5.4定義約束5.4.2主鍵約束主鍵約束可以用來(lái)實(shí)現(xiàn)實(shí)體完整性。主鍵可以是表中的一列,也可以是多個(gè)列的組合。由多個(gè)列組成的主鍵稱(chēng)為復(fù)合主鍵。MySQL中主鍵必須遵守以下規(guī)則:一個(gè)表只能定義一個(gè)主鍵;主鍵列不能取空值,表中的兩行在主鍵上不能具有相同的值,即主鍵值必須唯一,這就是唯一性原則;復(fù)合主鍵不能包含多余的列,如果從一個(gè)復(fù)合主鍵中刪除一列后,剩余的列構(gòu)成的主鍵仍滿足唯一性原則,那么這個(gè)復(fù)合主鍵是不正確的,稱(chēng)為最小化原則。復(fù)合主鍵的列表中每個(gè)列名只能出現(xiàn)一次。5.4定義約束5.4.2主鍵約束創(chuàng)建表時(shí)定義主鍵約束(1)定義為列級(jí)完整性約束在CREATETABLE語(yǔ)句中,在要定義為主鍵的列的屬性定義中加上PRIMARYKEY,語(yǔ)法格式為:col_namedata_type[(n[,m])][DEFAULT{literal|(expr)}]PRIMARYKEY5.4定義約束5.4.2主鍵約束創(chuàng)建表時(shí)定義主鍵約束【例5.5】創(chuàng)建student表,將sno列定義為主鍵,以列級(jí)完整性約束定義。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEstudent(snoCHAR(11)PRIMARYKEY,snameVARCHAR(10)NOTNULL,ssexCHAR(1)NOTNULLDEFAULT'男',sbirthdayDATENOTNULL,snationVARCHAR(10)NOTNULL,mnoCHAR(4));5.4定義約束5.4.2主鍵約束創(chuàng)建表時(shí)定義主鍵約束(2)定義為表級(jí)完整性約束在CREATETABLE語(yǔ)句中,在表中所有列的定義之后,加上主鍵約束的定義,其語(yǔ)法格式為:[CONSTRAINTconstraint_name]PRIMARYKEY(col_name[,col_name…])5.4定義約束5.4.2主鍵約束創(chuàng)建表時(shí)定義主鍵約束【例5.6】創(chuàng)建dept表,將dno列定義為主鍵,以表級(jí)完整性約束定義。列名數(shù)據(jù)類(lèi)型長(zhǎng)度允許空值約束說(shuō)明dnochar2否主鍵學(xué)院編號(hào)dnamevarchar20否唯一學(xué)院名稱(chēng)dlocVarchar20是
辦公地址dphonechar8是
辦公電話5.4定義約束5.4.2主鍵約束創(chuàng)建表時(shí)定義主鍵約束【例5.6】創(chuàng)建dept表,將dno列定義為主鍵,以表級(jí)完整性約束定義。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEdept(dnoCHAR(2)NOTNULL,dnameVARCHAR(20)NOTNULL,dlocVARCHAR(20),dphoneCHAR(8),CONSTRAINTpk_dnoPRIMARYKEY(dno));5.4定義約束5.4.2主鍵約束創(chuàng)建表時(shí)定義主鍵約束【例5.7】創(chuàng)建score表,score表的結(jié)構(gòu)如表5.7所示,sno列和cno列的組合為主鍵,以表級(jí)完整性約束定義。列名數(shù)據(jù)類(lèi)型長(zhǎng)度允許空約束說(shuō)明snochar11否外鍵,參照student表的sno列(sno,cno)組合作為主鍵學(xué)生編號(hào)cnochar3否外鍵,參照course表的cno列(sno,cno)組合作為主鍵課程編號(hào)gradetinyint
是
成績(jī)5.4定義約束5.4.2主鍵約束創(chuàng)建表時(shí)定義主鍵約束【例5.7】創(chuàng)建score表,score表的結(jié)構(gòu)如表5.7所示,sno列和cno列的組合為主鍵,以表級(jí)完整性約束定義。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEscore(snoCHAR(11),cnoCHAR(3),gradeTINYINT,CONSTRAINTpk_sno_cnoPRIMARYKEY(sno,cno));5.4定義約束5.4.2主鍵約束修改表時(shí)定義主鍵約束如果表已經(jīng)存在并且需要?jiǎng)?chuàng)建主鍵約束,可以用ALTERTABLE語(yǔ)句對(duì)表結(jié)構(gòu)進(jìn)行修改增加主鍵約束,語(yǔ)法格式如下:ALTERTABLEtbl_nameADD[CONSTRAINTconstraint_name]PRIMARYKEY(col_name[,col_name…]);5.4定義約束5.4.2主鍵約束修改表時(shí)定義主鍵約束【例5.8】修改course表,將cno設(shè)置為主鍵。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEcourseADDCONSTRAINTpk_cnoPRIMARYKEY(cno);5.4定義約束5.4.3唯一性約束如果表中某一列或者一些列的組合不允許有重復(fù)值,可以定義唯一性約束。唯一性約束和主鍵約束的區(qū)別是:一個(gè)表只能定義一個(gè)主鍵約束,但是可以定義多個(gè)唯一性約束設(shè)置為主鍵的列不允許空值,即使列的定義中沒(méi)有NOTNULL,而定義唯一性約束的列如果沒(méi)有NOTNULL,則可以有空值5.4定義約束5.4.3唯一性約束創(chuàng)建表時(shí)定義唯一性約束(1)定義為列級(jí)完整性約束在CREATETABLE語(yǔ)句中,在要定義為主鍵的列的屬性定義中加上UNIQUE,語(yǔ)法格式為:col_namedata_type[(n[,m])][NULL|NOTNULL][DEFAULT{literal|(expr)}]UNIQUE5.4定義約束5.4.3唯一性約束創(chuàng)建表時(shí)定義唯一性約束【例5.9】創(chuàng)建dept表,為dname列設(shè)置唯一性約束,以列級(jí)完整性約束定義。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEdept(dnoCHAR(2)NOTNULL,dnameVARCHAR(20)NOTNULLUNIQUE,dlocVARCHAR(20),dphoneCHAR(8),CONSTRAINTpk_dnoPRIMARYKEY(dno));5.4定義約束5.4.3唯一性約束創(chuàng)建表時(shí)定義唯一性約束(2)定義為表級(jí)完整性約束在CREATETABLE語(yǔ)句中,在表中所有列的定義之后,加上唯一性約束的定義,其語(yǔ)法格式為:[CONSTRAINTconstraint_name]UNIQUE(col_name[,col_name…])5.4定義約束5.4.3唯一性約束創(chuàng)建表時(shí)定義唯一性約束【例5.10】創(chuàng)建dept表,為dname設(shè)置唯一性約束,以表級(jí)完整性約束定義。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEdept(dnoCHAR(2)NOTNULL,dnameVARCHAR(20)NOTNULL,dlocVARCHAR(20),dphoneCHAR(8),CONSTRAINTpk_dnoPRIMARYKEY(dno),CONSTRAINTun_dnameUNIQUE(dname));5.4定義約束5.4.3唯一性約束修改表時(shí)定義唯一性約束如果表已經(jīng)存在并且需要?jiǎng)?chuàng)建唯一性約束,可以用ALTERTABLE語(yǔ)句對(duì)表結(jié)構(gòu)進(jìn)行修改增加唯一性約束,語(yǔ)法格式如下:ALTERTABLEtbl_nameADD[CONSTRAINTconstraint_name]UNIQUE(col_name[,col_name…])5.4定義約束5.4.3唯一性約束修改表時(shí)定義唯一性約束【例5.11】修改course表,為cname設(shè)置唯一性約束。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEcourseADDCONSTRAINTun_cnameUNIQUE(cname);5.4定義約束5.4.4CHECK約束CHECK約束用于對(duì)某一列或者多個(gè)列的值設(shè)置檢查條件,限制輸入的數(shù)據(jù)必須滿足檢查條件。CHECK約束一般用于實(shí)現(xiàn)用戶(hù)定義的完整性。5.4定義約束5.4.4CHECK約束創(chuàng)建表時(shí)定義CHECK約束(1)定義為列級(jí)完整性約束在CREATETABLE語(yǔ)句中,在要定義CHECK約束的列的屬性定義中加上CHECK約束的定義,語(yǔ)法格式為:col_namedata_type[(n[,m])][NULL|NOTNULL][DEFAULT{literal|(expr)}]CHECK(expr)5.4定義約束5.4.4CHECK約束創(chuàng)建表時(shí)定義CHECK約束【例5.12】創(chuàng)建student表,定義檢查約束限制ssex列的值只能取'男'或'女',以列級(jí)完整性約束定義。在MySQL命令行客戶(hù)端輸入命令:CREATETABLEstudent(snoCHAR(11)PRIMARYKEY,snameVARCHAR(10)UNIQUE,ssexCHAR(1)DEFAULT'男'CHECK(ssex='男'orssex='女'),sbirthdayDATE,snationVARCHAR(10),mnoCHAR(4));5.4定義約束5.4.4CHECK約束創(chuàng)建表時(shí)定義CHECK約束(2)定義為表級(jí)完整性約束在CREATETABLE語(yǔ)句中,在表中所有列的定義之后,加上檢查約束的定義,其語(yǔ)法格式為:[CONSTRAINTconstraint_name]CHECK(expr)5.4定義約束5.4.4CHECK約束創(chuàng)建表時(shí)定義CHECK約束【例5.13】創(chuàng)建student表,定義檢查約束限制ssex列的值,以表級(jí)完整性約束定義。CREATETABLEstudent(snoCHAR(11)PRIMARYKEY,snameVARCHAR(10),ssexCHAR(1)DEFAULT'男',sbirthdayDATE,snationVARCHAR(10),mnoCHAR(4),CONSTRAINTch_ssexCHECK(ssex='男'orssex='女'));5.4定義約束5.4.4CHECK約束修改表時(shí)定義CHECK約束如果表已經(jīng)存在并且需要?jiǎng)?chuàng)建CHECK約束,可以用ALTERTABLE語(yǔ)句對(duì)表結(jié)構(gòu)進(jìn)行修改增加CHECK約束,語(yǔ)法格式如下:ALTERTABLEtbl_nameADD[CONSTRAINTconstraint_name]CHECK(expr)【例5.14】修改course表,為cterm列設(shè)置檢查約束限制輸入的值必須在1到8之間。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEcourseADDCONSTRAINTch_ctermCHECK(cterm>=1andcterm<=8);5.4定義約束5.4.5外鍵約束外鍵約束在兩個(gè)表的列之間建立參照關(guān)系,用來(lái)實(shí)現(xiàn)參照完整性。一個(gè)表可以有一個(gè)或多個(gè)外鍵,外鍵可以是一列也可以是多列,外鍵的值可以為空值,如果不為空則必須是它所參照的另一個(gè)表的主鍵的一個(gè)值。外鍵約束通常涉及到兩個(gè)表,根據(jù)表之間的參照關(guān)系分為:主表(父表):被參照表,在兩個(gè)表的參照關(guān)系中主鍵所在的表從表(子表):參照表,在兩個(gè)表的參照關(guān)系中外鍵所在的表5.4定義約束5.4.5外鍵約束創(chuàng)建表時(shí)定義外鍵約束在CREATETABLE語(yǔ)句中定義外鍵約束,其語(yǔ)法格式為:[CONSTRAINT[constraint_name]]FOREIGNKEY(col_name,...)REFERENCEStbl_name(col_name,...)[ONDELETERESTRICT|CASCADE|SETNULL|NOACTION][ONUPDATERESTRICT|CASCADE|SETNULL|NOACTION]5.4定義約束5.4.5外鍵約束【例5.15】創(chuàng)建score表,將sno列設(shè)置為外鍵,參照student表的sno列。CREATETABLEscore(snochar(11)notnull,cnochar(3)notnull,gradetinyint,CONSTRAINTpk_sno_cnoPRIMARYKEY(sno,cno),CONSTRAINTfk_snoFOREIGNKEY(sno)REFERENCESstudent(sno));5.4定義約束5.4.5外鍵約束修改表時(shí)定義外鍵約束如果表已經(jīng)存在并且需要?jiǎng)?chuàng)建外鍵約束,可以用ALTERTABLE語(yǔ)句對(duì)表結(jié)構(gòu)進(jìn)行修改增加外鍵約束,語(yǔ)法格式如下:ALTERTABLEtbl_nameADD[CONSTRAINT[constraint_name]]FOREIGNKEY(col_name,...)REFERENCEStbl_name(col_name,...)[ONDELETERESTRICT|CASCADE|SETNULL|NOACTION][ONUPDATERESTRICT|CASCADE|SETNULL|NOACTION]5.4定義約束5.4.5外鍵約束【例5.16】修改score表,將cno列設(shè)置為外鍵參照course表的cno列。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEscoreADDCONSTRAINTfk_cnoFOREIGNKEY(cno)REFERENCEScourse(cno);5.
5使用Workbench創(chuàng)建表列名數(shù)據(jù)類(lèi)型長(zhǎng)度允許空約束說(shuō)明mnochar4否主鍵專(zhuān)業(yè)編號(hào)mnamevarchar20否唯一專(zhuān)業(yè)名稱(chēng)dnochar2是外鍵,參照dept表的dno列所屬學(xué)院編號(hào)專(zhuān)業(yè)表major5.
5使用Workbench創(chuàng)建表打開(kāi)WorkBench工具,連接到MySQL服務(wù)器。在左側(cè)的“SCHEMAS”導(dǎo)航欄中找到j(luò)wgl數(shù)據(jù)庫(kù),單擊左邊的箭頭,在下面的“Tables”節(jié)點(diǎn)上單擊鼠標(biāo)右鍵,在出現(xiàn)的菜單中選擇“CreateTable…”,右側(cè)將打開(kāi)“new_table-Table”對(duì)話框的“Columns”選項(xiàng)卡。5.
5使用Workbench創(chuàng)建表5.
5使用Workbench創(chuàng)建表在TableName文本框中輸入要?jiǎng)?chuàng)建的表名major,在Charset/Collation、Engine下拉列表中選擇表的默認(rèn)字符集、字符集的排序規(guī)則、存儲(chǔ)引擎,這里采用默認(rèn)值。依次輸入每個(gè)列的名稱(chēng)、數(shù)據(jù)類(lèi)型、長(zhǎng)度;mno列為主鍵,不允許空值,勾選該列后的PK和NN復(fù)選框;mname列不允許空值,要求唯一,勾選該列后的NN和UQ復(fù)選框。5.
5使用Workbench創(chuàng)建表5.
5使用Workbench創(chuàng)建表選擇“ForeignKeys”選項(xiàng)卡,在左側(cè)列表框的“ForeignKeyName”處輸入外鍵約束的名稱(chēng)“fk_dno”,“ReferencedTable”下拉列表中選擇dept表。右側(cè)列表框中的“Column”處出現(xiàn)major表中的列,勾選dno列,在對(duì)應(yīng)的“ReferencedColumn”處選擇dept表中的dno列。單擊“Apply”按鈕,完成表的創(chuàng)建。5.
5使用Workbench創(chuàng)建表5.6查看表5.6.1查看當(dāng)前數(shù)據(jù)庫(kù)中的表可以使用SHOWTABLES命令查看當(dāng)前數(shù)據(jù)庫(kù)中已有的表。【例5.17】查看jwgl數(shù)據(jù)庫(kù)中已有的表。在MySQL命令行客戶(hù)端輸入命令:USEjwglSHOWTABLES;5.6查看表5.6.2查看表結(jié)構(gòu)在MySQL中可以使用DESCRIBE語(yǔ)句或SHOWCOLUMNS|FIELDS語(yǔ)句查看某個(gè)表的基本結(jié)構(gòu),包括列名、數(shù)據(jù)類(lèi)型、鍵、是否允許空值、默認(rèn)值等信息。5.6查看表5.6.2查看表結(jié)構(gòu)DESCRIBE語(yǔ)句語(yǔ)法格式:DESC[RIBE][db_name.]tbl_name【例5.18】使用DESCRIBE語(yǔ)句查看jwgl數(shù)據(jù)庫(kù)中student表的結(jié)構(gòu)。在MySQL命令行客戶(hù)端輸入命令:DESCstudent;5.6查看表5.6.2查看表結(jié)構(gòu)SHOWCOLUMNS|FIELDS語(yǔ)句語(yǔ)法格式:SHOW{COLUMNS|FIELDS}{FROM|IN}tbl_name[{FROM|IN}db_name]【例5.19】使用SHOWCOLUMNS|FIELDS語(yǔ)句查看jwgl數(shù)據(jù)庫(kù)中course表的結(jié)構(gòu)。在MySQL命令行客戶(hù)端輸入命令:SHOWCOLUMNSFROMcourse;5.6查看表5.6.3查看表的定義語(yǔ)句SHOWCREATETABLE語(yǔ)句可以用來(lái)查看創(chuàng)建表的CREATETABLE語(yǔ)句,其語(yǔ)法格式為:SHOWCREATETABLEtbl_name【例5.20】使用SHOWCREATETABLE語(yǔ)句查看student表的定義。在MySQL命令行客戶(hù)端輸入命令:SHOWCREATETABLEstudent\G5.6查看表5.6.3查看表的定義語(yǔ)句5.7修改表MySQL中可以使用ALTERTABLE語(yǔ)句修改表,包括:列的修改約束的修改修改表名和表的選項(xiàng)。5.7修改表5.7.1列的添加、修改與刪除1.添加列MySQL中添加列的語(yǔ)句格式如下:ALTERTABLEtbl_nameADD[COLUMN]col_namecolumn_definition[FIRST|AFTERcol_name]5.7修改表5.7.1列的添加、修改與刪除【例5.21】在student表中添加學(xué)生電話stelephone字段,數(shù)據(jù)類(lèi)型為VARCHAR,長(zhǎng)度8,允許空值。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEstudentADDstelephoneVARCHAR(8);5.7修改表5.7.1列的添加、修改與刪除2.修改列的定義MySQL中修改列名的語(yǔ)句格式如下:ALTERTABLEtbl_nameMODIFY[COLUMN]col_namecolumn_definition[FIRST|AFTERcol_name]5.7修改表5.7.1列的添加、修改與刪除【例5.22】將student表中的stelephone字段的數(shù)據(jù)類(lèi)型改為CHAR,長(zhǎng)度8。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEstudentMODIFYstelephoneCHAR(8);5.7修改表5.7.1列的添加、修改與刪除3.修改列名MySQL中修改列名的語(yǔ)句格式如下:ALTERTABLEtbl_nameRENAMECOLUMNold_col_nameTOnew_col_name5.7修改表5.7.1列的添加、修改與刪除【例5.23】將student表中的stelephone字段的名稱(chēng)改為sphone在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEstudentRENAMECOLUMNstelephoneTOsphone;5.7修改表5.7.1列的添加、修改與刪除4.修改列名和列定義MySQL中可以使用CHANGECOLUMN修改列名和列的定義,語(yǔ)句格式如下:ALTERTABLEtbl_nameCHANGE[COLUMN]old_col_namenew_col_namecolumn_definition[FIRST|AFTERcol_name]5.7修改表5.7.1列的添加、修改與刪除【例5.24】將student表中的sphone字段的名稱(chēng)改為smobilephone,數(shù)據(jù)類(lèi)型為VARCHAR,長(zhǎng)度11,允許空值。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEstudentCHANGEsphonesmobilephoneVARCHAR(11);5.7修改表5.7.1列的添加、修改與刪除5.修改列的默認(rèn)值MySQL中可以使用ALTERCOLUMN修改列的默認(rèn)值、是否可見(jiàn),語(yǔ)句格式如下:ALTERTABLEtbl_nameALTER[COLUMN]col_name{SETDEFAULT{literal|(expr)}|SET{VISIBLE|INVISIBLE}|DROPDEFAULT5.7修改表5.7.1列的添加、修改與刪除【【例5.25】修改student表,為snation列設(shè)置默認(rèn)值'漢族'。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEstudentALTERCOLUMNsnationSETDEFAULT'漢族';5.7修改表5.7.1列的添加、修改與刪除CHANGE、MODIFY、RENAMECOLUMN和ALTER子句允許對(duì)表中現(xiàn)有列進(jìn)行更改,它們的區(qū)別為:MODIFY[COLUMN]子句只能改列的定義,不能改列的名稱(chēng);RENAMECOLUMN子句只能改列的名稱(chēng),不能改列的定義;MODIFY[COLUMN]子句可以重命名列,也可以更改列定義,一般用于同時(shí)更改列名和列定義。如果只改列名,使用RENAMECOLUMN子句更簡(jiǎn)單。如果只改列的定義,使用MODIFY[COLUMN]子句更方便。ALTER[COLUMN]子句僅用于更改列的默認(rèn)值和可見(jiàn)性。5.7修改表5.7.1列的添加、修改與刪除6.刪除列MySQL中刪除列的語(yǔ)句格式如下:ALTERTABLEtbl_nameDROP[COLUMN]col_name【例5.26】修改student表,刪除smobilephone列。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEstudentDROPCOLUMNsmobilephone;5.7修改表5.7.2約束的添加與刪除1.刪除主鍵約束MySQL中可以通過(guò)下面的語(yǔ)句刪除主鍵:ALTERTABLEtbl_nameDROPPRIMARYKEY需要說(shuō)明的是,如果要?jiǎng)h除的主鍵被其他表中的外鍵引用,會(huì)刪除失敗,如下例所示?!纠?.27】使用DROPPRIMARYKEY刪除student表的主鍵。在MySQL命令行客戶(hù)端輸入命令:ALTERTABLEstudentDROPPRIMARYKEY;5.7修改表5.7.2約束的添加與刪除2.刪除唯一性約束MySQL中唯一性
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 開(kāi)封仿古建筑青瓦施工方案
- 計(jì)劃安排豐富活動(dòng)
- 人教版高中物理選擇性必修第二冊(cè)帶電粒子在組合場(chǎng)中的運(yùn)動(dòng)課件
- 2025至2030年中國(guó)導(dǎo)電橡膠按鍵數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)客廳盆花數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)塑料瓶套數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025屆高三英語(yǔ)應(yīng)用文寫(xiě)作:告知信
- 2025至2030年中國(guó)5-氯-2-甲基苯胺數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 鈷鎳元素提純和原生化裝置企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 中藥材種植智能溫濕度控制器行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 辦公軟件題庫(kù)(173道)
- 2024數(shù)字化風(fēng)電場(chǎng)智慧運(yùn)營(yíng)
- ISO9001、ISO14001和ISO45001質(zhì)量環(huán)境及職業(yè)健康安全三個(gè)體系的對(duì)比
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)教程(高校創(chuàng)新創(chuàng)業(yè)教育課程)全套教學(xué)課件
- 2024年內(nèi)蒙古交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整
- 天津和平區(qū)2024屆高三一模數(shù)學(xué)試題(解析版)
- 《中東》地圖填圖專(zhuān)練
- 2024年江蘇蘇??毓杉瘓F(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 工商聯(lián)業(yè)務(wù)工作培訓(xùn)
- 商業(yè)街消防安全培訓(xùn)
- 湖北省曾都區(qū)烏鴉山礦區(qū)建筑用輝綠巖礦礦產(chǎn)資源開(kāi)發(fā)利用與生態(tài)復(fù)綠方案
評(píng)論
0/150
提交評(píng)論