MySQL數(shù)據庫管理與應用任務式教程(微課版)單元4 創(chuàng)建與管理表_第1頁
MySQL數(shù)據庫管理與應用任務式教程(微課版)單元4 創(chuàng)建與管理表_第2頁
MySQL數(shù)據庫管理與應用任務式教程(微課版)單元4 創(chuàng)建與管理表_第3頁
MySQL數(shù)據庫管理與應用任務式教程(微課版)單元4 創(chuàng)建與管理表_第4頁
MySQL數(shù)據庫管理與應用任務式教程(微課版)單元4 創(chuàng)建與管理表_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單元4創(chuàng)建與管理表《MySQL數(shù)據庫管理與應用任務式教程(慕課版)》學習內容任務1操作學生成績管理數(shù)據庫的表

2任務2操作學生成績管理數(shù)據庫中表的數(shù)據數(shù)據庫系統(tǒng)的組成任務3操作學生成績管理數(shù)據庫中的索引任務4實現(xiàn)學生成績管理數(shù)據庫中表的數(shù)據完整性在cjgl數(shù)據庫中有3張表:學生表xs、課程表kc和成績表cj,這些表的結構分別如表4-1~表4-3所示,表的初始數(shù)據分別如表4-4、表4-5和表4-6所示。任務1

操作學生成績管理數(shù)據庫的表任務1

操作學生成績管理數(shù)據庫的表任務1

操作學生成績管理數(shù)據庫的表任務1

操作學生成績管理數(shù)據庫的表任務1

操作學生成績管理數(shù)據庫的表任務1

操作學生成績管理數(shù)據庫的表4.1.1用命令方式創(chuàng)建和管理數(shù)據表創(chuàng)建數(shù)據表的過程是定義表中數(shù)據列的過程,也是實施數(shù)據完整性(包括域完整性、實體完整性和參照完整性)約束的過程。1.查看表在MySQL中,可以用SHOWTABLES語句查看當前數(shù)據庫中有哪些表。其語法格式如下SHOWTABLES[LIKE匹配模式];省略[LIKE匹配模式],表示查看當前數(shù)據庫中的所有數(shù)據表。添加[LIKE匹配模式],則按照“匹配模式”查看數(shù)據表?!?”用于匹配任意長度的字符串;“_”用于僅匹配一個字符。任務1

操作學生成績管理數(shù)據庫的表【例題4.1】查看示例數(shù)據庫world中的表。執(zhí)行的SQL語句及結果如圖。任務1

操作學生成績管理數(shù)據庫的表在MySQL中,可以用SHOWTABLESTATUS語句查看數(shù)據庫中數(shù)據表的狀態(tài)信息,如數(shù)據表的名稱、存儲引擎、結構文件版本號、記錄的存儲格式、創(chuàng)建時間等。其語法格式如下。SHOWTABLESTATUS[FROM數(shù)據庫名][LIKE匹配模式];【例題4.2】查看示例數(shù)據庫world中表city的狀態(tài)信息。執(zhí)行如下SQL語句mysql>SHOWTABLESTATUSLIKE'city'\G;任務1

操作學生成績管理數(shù)據庫的表2.創(chuàng)建表

在MySQL中,可以使用CREATETABLE語句創(chuàng)建表,該語句完整的語法比較復雜,主要由表創(chuàng)建定義(create_definition)、表選項(table_options)和分區(qū)選項(partition_options)等部分組成。其基本語法格式如下。任務1

操作學生成績管理數(shù)據庫的表任務1

操作學生成績管理數(shù)據庫的表語法說明如下。①如果創(chuàng)建多個列,要用英文逗號將它們隔開。②列定義的完整形式比較復雜,涉及如下關鍵字。AUTO_INCREMENT:用于設置某列有自增屬性,僅用于整數(shù)列。當插入NULL或0到一個AUTO_INCREMENT列中時,列被設置為該列的最大值+1。AUTO_INCREMENT順序從1開始。每個表只能有一個AUTO_INCREMENT列,并且它必須被索引。COMMENT'string':表的注釋;最大長度為60個字符。COLLATEcollation_name:用于指定表的校驗方式。COLUMN_FORMAT:FIXED|DYNAMIC|DEFAULT。STORAGE:DISK|MEMORY。任務1

操作學生成績管理數(shù)據庫的表③FULLTEXT:表示全文索引,在檢索長文本的時候效果最好,檢索短文本時建議使用Index。SPATIAL:表示空間索引,是對空間數(shù)據類型的字段創(chuàng)建的索引。⑥table_options子句:用于指定表的各種屬性。⑦[AS]query_expression:利用查詢返回的結果創(chuàng)建表,此時create_definition子句可省略。唯一索引中重復值的行根據指定的是IGNORE還是REPLACE,選擇忽略或者替換現(xiàn)有行。如果兩者都未指定,出現(xiàn)重復值時將報錯。任務1

操作學生成績管理數(shù)據庫的表【例題4.3】在學生成績管理數(shù)據庫cjgl中,用命令方式創(chuàng)建學生表xs1。mysql>USEcjgl;mysql>CREATETABLExs1( 學號CHAR(6), 姓名CHAR(8),

專業(yè)名CHAR(10), 性別ENUM('男','女'), 出生時間DATETIME, 總學分TINYINT(1)COMMENT'', 備注TEXT(2));

以上語句執(zhí)行后,可查看數(shù)據表是否創(chuàng)建成功,執(zhí)行如下語句。mysql>SHOWTABLES;任務1

操作學生成績管理數(shù)據庫的表3.實現(xiàn)主鍵約束、空值約束、唯一性約束、默認約束和檢查約束完整性約束是MySQL提供的自動保持數(shù)據完整性的一種方法。它通過限制列中數(shù)據、記錄中的數(shù)據和表之間的數(shù)據來保證數(shù)據庫中數(shù)據的正確性和有效性。在MySQL中有6種約束:主鍵約束、空值約束、唯一性約束、默認約束、外鍵約束和檢查約束。在這6種約束中,一個數(shù)據表中只能有一個主鍵約束,其他約束可以有多個。完整性約束的基本語法格式如下。[CONSTRAINT<約束名>]<約束類型>任務1

操作學生成績管理數(shù)據庫的表在MySQL中,對于基本表的約束分為列約束和表約束。列約束是對某一個特定列的約束,包含在列定義中,直接跟在列的其他定義之后,用空格分隔,不必指定列名。表約束與列定義相互獨立,不包括在列定義中,通常用于對多個列一起進行約束,與列定義之間用“,”分隔,定義表約束時必須指出要約束的列的名稱。任務1

操作學生成績管理數(shù)據庫的表此處僅介紹主鍵約束、空值約束、唯一性約束、默認約束和檢查約束,外鍵約束將在任務4-4中介紹。(1)主鍵約束主鍵(PrimaryKey)是數(shù)據表中的一列或多列的組合,能夠唯一地確定表中的每一條記錄。在設計數(shù)據表時,一般情況下都會在表中設置一個主鍵。例如,學號是學生表的主鍵,學號和課程號是成績表的主鍵。任務1

操作學生成績管理數(shù)據庫的表主鍵約束的基本語法格式如下。列名數(shù)據類型PRIMARYKEY--列級約束或[CONSTRAINT約束名]PRIMARYKEY(列名1,…,列名n)--表級約束主鍵約束用于定義基本表的主鍵,要求主鍵列的數(shù)據唯一,并且不允許為空。主鍵既可用于列約束,也可用于表約束。主鍵可以結合外鍵來定義不同數(shù)據表之間的關系,并且可以加快數(shù)據庫查詢的速度。任務1

操作學生成績管理數(shù)據庫的表【例題4.4】在學生成績管理數(shù)據庫cjgl中,用命令方式創(chuàng)建課程表kc,主鍵為課程號。單字段組成的主鍵可以在定義列的同時指定。執(zhí)行如下SQL語句。mysql>USEcjgl;mysql>CREATETABLEkc (課程號CHAR(3)NOTNULLPRIMARYKEY, 課程名CHAR(16)NOTNULL,

開課學期TINYINTNOTNULLCHECK(開課學期>=1AND開課學期<=6),學時TINYINTNOTNULL, 學分TINYINTNULL);任務1

操作學生成績管理數(shù)據庫的表

以上SQL語句執(zhí)行后,可查看數(shù)據表是否創(chuàng)建成功,執(zhí)行如下SQL語句。mysql>SHOWTABLES;多字段聯(lián)合組成的主鍵只能在定義完所有列之后指定。任務1

操作學生成績管理數(shù)據庫的表【例題4.5】在學生成績管理數(shù)據庫cjgl中,用命令方式創(chuàng)建成績表cj,主鍵為(學號,課程號)。執(zhí)行如下SQL語句。mysql>CREATETABLEcj (學號CHAR(6)NOTNULL, 課程號CHAR(3)NOTNULL, 成績TINYINT, PRIMARYKEY(學號,課程號));以上SQL語句執(zhí)行后,可查看數(shù)據表是否創(chuàng)建成功,執(zhí)行如下SQL語句。mysql>SHOWTABLES;任務1

操作學生成績管理數(shù)據庫的表(2)非空約束非空約束(NOTNULL)用來控制是否允許某列的值為NULL。列的值默認為NULL。當某一列的值一定要不為NULL才有意義的時候,應為其設置非空約束。非空約束的基本語法格式如下。列名數(shù)據類型NOTNULL非空約束只能用于定義列約束。創(chuàng)建非空約束的方法如例題4.4所示。對于使用了非空約束的字段,如果在添加數(shù)據時沒有指定值,數(shù)據庫系統(tǒng)會報錯。任務1

操作學生成績管理數(shù)據庫的表(3)唯一性約束唯一性約束(UNIQUE)是指一個或者多個列的組合值具有唯一性,用于防止在列中輸入重復的值。定義了唯一性約束的列稱為唯一鍵,系統(tǒng)自動為唯一鍵創(chuàng)建唯一索引,從而保證了唯一鍵的唯一性。唯一性約束的基本語法格式如下。列名數(shù)據類型UNIQUE--列級約束或[CONSTRAINT<約束名>]UNIQUE(列名1,…,列名n)--表級約束例如,在學生表中,如果要避免表中的學生姓名重復,就可以為姓名列設置唯一性約束。唯一性約束與主鍵約束的共同之處是它們都能夠確保表中對應列不存在重復值,但兩者之間有著較大的區(qū)別:在一個基本表中只能定義一個主鍵約束,但可定義多個唯一性約束;任務1

操作學生成績管理數(shù)據庫的表對于指定為主鍵的一個列或多個列的組合,其中任何一個列都不能出現(xiàn)空值,而對于具有唯一性約束的唯一鍵,則允許為空,但只能有一個空值;一般創(chuàng)建主鍵約束時,系統(tǒng)會自動產生索引,索引的默認類型為聚集索引,而創(chuàng)建唯一性約束時,系統(tǒng)會自動產生一個唯一索引,索引的默認類型為非聚集索引。注意:不能為同一個列或一組列既定義唯一性約束,又定義主鍵約束。任務1

操作學生成績管理數(shù)據庫的表(4)默認值約束默認值約束(DEFAULT)用來指定某列的默認值。當數(shù)據表中的某個列未輸入值時,系統(tǒng)自動為其添加一個已經設置好的值。如班里的男同學較多,學生表中的性別就可以默認為“1”,即男。如果插入一條新記錄時沒有為某列賦值,那么系統(tǒng)會自動將這個列賦值為1。默認值約束的基本語法格式如下。列名數(shù)據類型DEFAULT默認值約束只能用于定義列約束。默認值約束通常用在已經設置了非空約束的列,這樣能夠防止數(shù)據表在錄入數(shù)據時出現(xiàn)錯誤。如果沒有為列指定默認值,MySQL會自動分配一個默認值。如果列可以取NULL作為值,那么其默認值是NULL。任務1

操作學生成績管理數(shù)據庫的表如果列被聲明為NOTNULL,那么其默認值取決于列類型,具體說明如下。①對于數(shù)值列,除AUTO_INCREMENT列外,其默認值為0。而對于AUTO_INCREMENT列,其默認值為該列的序列中的下一個數(shù)。②對于非TIMESTAMP的日期和時間類型列,其默認值是該類型適當?shù)摹傲恪敝?。例如,DATE類型的“零”值為“0000-00-00”。對于表中第一個TIMESTAMP列,其默認值是當前的日期和時間③對于非ENUM的字符串類型列,其默認值是空字符串。對于ENUM列,其默認值是第一個枚舉值。任務1

操作學生成績管理數(shù)據庫的表(5)檢查約束檢查約束(CHECK)用來檢查數(shù)據表中的字段值是否有效。檢查約束在創(chuàng)建表時定義,可以定義成列級約束,也可以定義成表級約束。其基本語法格式如下。列名數(shù)據類型CHECK(表達式)例如,課程表kc中的“開課學期”列的取值范圍應該為1~6,所以可以設置“開課學期>=1AND開課學期<=6”,如例題4.4所示。學生表xs中的性別列的值只能是男或女,所以可以設置“性別='男'OR性別='女')”或“性別IN('男','女')”,這樣能夠減少無效數(shù)據的輸入。任務1

操作學生成績管理數(shù)據庫的表【例題4.6】在學生成績管理數(shù)據庫cjgl中,用命令方式創(chuàng)建學生表xs,表的結構見表4-1。創(chuàng)建一個結構與學生表xs相同的表xs1。mysql>USEcjgl;mysql>CREATETABLExs('學號'CHAR(6)NOTNULLPRIMARYKEY,'姓名'CHAR(8)NOTNULL,'專業(yè)名'CHAR(10)NULL,'性別'ENUM('男','女')NOTNULLDEFAULT'男'CHECK(性別='男'OR性別='女'),任務1

操作學生成績管理數(shù)據庫的表'出生時間'DATETIMENOTNULL,'總學分'TINYINT(1)NULLCOMMENT'','備注'TEXT(2)NULL);以上SQL語句執(zhí)行后,可查看數(shù)據表xs是否創(chuàng)建成功,執(zhí)行如下SQL語句。mysql>SHOWTABLES;mysql>CREATETABLExs1ASSELECT*FROMxs;查看數(shù)據表xs1是否創(chuàng)建成功,執(zhí)行如下SQL語句。mysql>SHOWTABLES;任務1

操作學生成績管理數(shù)據庫的表4.查看表的結構在數(shù)據庫中創(chuàng)建表后,有時需要查看表的結構(如表的屬性、列屬性和索引等)是否被正確定義。在MySQL中,可以使用DESCRIBE或SHOWCREATETABLE語句來查看數(shù)據表的結構。(1)使用DESCRIBE語句查看表的結構DESCRIBE語句的語法格式如下。DESCRIBE表名;或DESC表名;該語句會以表格的形式來展示表的字段信息,包括字段名、字段類型、是否為主鍵、默認值等。任務1

操作學生成績管理數(shù)據庫的表【例題4.7】使用DESC語句查看學生表xs和表xs1的結構。執(zhí)行如下SQL語句,結果如圖4-1所示。mysql>descxs;mysql>describexs1;其中,各個字段的含義如下。①Null:表示該列是否可以存儲NULL。②Key:表示該列是否已編制索引;PRI表示該列是表中主鍵的一部分,UNI表示該列是UNIQUE索引的一部分,MUL表示在該列中某個給定值允許出現(xiàn)多次。③Default:表示該列的默認值。④Extra:表示可以獲取的與給定列有關的附加信息,如AUTO_INCREMENT等。圖4-1例題4.7的運行結果任務1

操作學生成績管理數(shù)據庫的表(2)使用SHOWCREATETABLE語句查看表的詳細結構SHOWCREATETABLE語句以SQL語句的形式展示表結構,其語法格式如下。SHOWCREATETABLE表名;和DESCRIBE語句相比,SHOWCREATETABLE語句展示的內容更加豐富,通過它可以查看表的存儲引擎和字符編碼,還可以在語句的結尾處通過\g或者\G參數(shù)來控制展示格式。任務1

操作學生成績管理數(shù)據庫的表【例題4.8】使用SHOWCREATETABLE語句查看表xs的詳細信息,該語句以\g或\G結尾。執(zhí)行如下SQL語句mysql>SHOWCREATETABLExs\G;任務1

操作學生成績管理數(shù)據庫的表5.修改表修改表指的是修改數(shù)據庫中已經存在的數(shù)據表的結構。在MySQL中可以使用ALTERTABLE語句修改表的名稱和結構,例如增加列、修改列的名稱、修改列的類型、修改列的位置、修改表的存儲引擎、取消表的外鍵、刪除列等。其語法格式如下。ALTERTABLE表名[修改選項][分區(qū)選項]其中,修改選項的語法格式如下。{RENAME[TO|AS]<新表名>|ADDCOLUMN<列名><新列定義>[FIRST|AFTER<列名>]|DROPCOLUMN<列名>任務1

操作學生成績管理數(shù)據庫的表|CHANGECOLUMN<舊列名><新列名><新列定義>[FIRST|AFTER<列名>]|ALTERCOLUMN<列名>{SETDEFAULT<默認值>|DROPDEFAULT}|MODIFYCOLUMN<列名><類型>[FIRST|AFTER<列名>]|CHARACTERSET<字符集名>|COLLATE<校對規(guī)則名>}任務1

操作學生成績管理數(shù)據庫的表(1)修改表名在MySQL中可以使用ALTERTABLE語句修改表名,其語法格式如下。ALTERTABLE表名RENAME[TO|AS]<新表名>;【例題4.9】將數(shù)據表xs1的名稱改為student。執(zhí)行如下SQL語句。mysql>ALTERTABLExs1RENAMETOstudent;查看修改結果,執(zhí)行如下SQL語句。mysql>SHOWTABLES;任務1

操作學生成績管理數(shù)據庫的表(2)修改表的字符集在MySQL中可以使用ALTERTABLE語句修改表的字符集,其語法格式如下。ALTERTABLE表名[DEFAULT]CHARACTERSET<字符集名>[DEFAULT]COLLATE<校對規(guī)則名>;【例題4.10】將數(shù)據表student的字符集修改為gb2312,將校對規(guī)則修改為gb2312_chinese_ci。執(zhí)行如下SQL語句。mysql>ALTERTABLEstudentCHARACTERSETgb2312DEFAULTCOLLATEgb2312_chinese_ci;查看修改結果,執(zhí)行如下SQL語句。mysql>SHOWCREATETABLEstudent\G;任務1

操作學生成績管理數(shù)據庫的表(3)添加列在MySQL中可以使用ALTERTABLE語句為數(shù)據表添加新列,其語法格式如下。ALTERTABLE表名ADD<新列名><數(shù)據類型>[約束條件][FIRST|AFTER<已有列名>];【例題4.11】在學生成績管理數(shù)據庫cjgl中,用命令方式在學生表xs的總學分后增加新列獎學金等級。執(zhí)行如下SQL語句mysql>ALTERTABLExsADD獎學金等級TINYINTNULLAFTER總學分;查看修改結果,執(zhí)行如下SQL語句。mysql>DESCxs;任務1

操作學生成績管理數(shù)據庫的表(4)修改列名在MySQL中可以使用ALTERTABLE語句修改表中列的名稱,其語法格式如下。ALTERTABLE表名CHANGE<舊列名><新列名><新數(shù)據類型>;【例題4.12】在學生成績管理數(shù)據庫cjgl中,用命令方式將學生表xs中的獎學金等級列名改為“獎學金”,數(shù)據類型不變。執(zhí)行如下SQL語句。mysql>ALTERTABLExsCHANGE獎學金等級獎學金TINYINT;查看修改結果,執(zhí)行如下SQL語句。mysql>DESCxs;任務1

操作學生成績管理數(shù)據庫的表(5)修改字段數(shù)據類型在MySQL中可以使用ALTERTABLE語句修改列的數(shù)據類型,其語法格式如下。ALTERTABLE表名MODIFY<列名><數(shù)據類型>;【例題4.13】在學生成績管理數(shù)據庫cjgl中,用命令方式將學生表xs中的獎學金等級列的數(shù)據類型改為INT執(zhí)行如下SQL語句。mysql>ALTERTABLExsMODIFY獎學金INT;查看修改結果,執(zhí)行如下SQL語句。mysql>DESCxs;任務1

操作學生成績管理數(shù)據庫的表(6)修改字段的位置在MySQL中可以使用ALTERTABLE語句修改列在表中的排列位置,其語法格式如下。ALTERTABLE表名MODIFY<列名1><數(shù)據類型>FIRST|AFTER<列名2>;【例題4.14】在學生成績管理數(shù)據庫cjgl中,用命令方式將表student中的姓名列放在表的第一位。執(zhí)行如下SQL語句。mysql>ALTERTABLEstudentMODIFY姓名CHAR(8)FIRST;查看修改結果,執(zhí)行如下SQL語句。mysql>SHOWCREATETABLEstudent\G;任務1

操作學生成績管理數(shù)據庫的表(7)刪除字段在MySQL中可以使用ALTERTABLE語句將數(shù)據表中的某個列從表中移除,其語法格式如下。ALTERTABLE表名DROP<列名>;【例題4.15】在學生成績管理數(shù)據庫cjgl中,用命令方式刪除學生表xs中名為“獎學金”的列。執(zhí)行如下SQL語句。mysql>ALTERTABLExsDROPCOLUMN獎學金;查看修改結果,執(zhí)行如下SQL語句。mysql>DESCxs;任務1

操作學生成績管理數(shù)據庫的表(8)修改數(shù)據表的存儲引擎在MySQL中可以使用ALTERTABLE語句修改數(shù)據表的存儲引擎,其語法格式如下。ALTERTABLE表名ENGINE=新存儲引擎名;【例題4.16】在學生成績管理數(shù)據庫cjgl中,用命令方式更改表student的存儲引擎為MyISAM。執(zhí)行如下SQL語句。mysql>ALTERTABLEstudentENGINE=MyISAM;查看修改結果,執(zhí)行如下SQL語句。mysql>SHOWCREATETABLEstudent\G;任務1

操作學生成績管理數(shù)據庫的表6.刪除表在MySQL數(shù)據庫中,使用DROPTABLE語句可以刪除一個或多個不再需要的表,其語法格式如下。DROPTABLE[IFEXISTS]<表名1>[,<表名2>,...]任務1

操作學生成績管理數(shù)據庫的表【例題4.17】在學生成績管理數(shù)據庫cjgl中,用命令方式刪除表student和xs表xs。執(zhí)行如下SQL語句。DROPTABLEstudent;查看刪除結果。mysql>SHOWTABLES;mxsql>DROPTABLExs;任務1

操作學生成績管理數(shù)據庫的表4.1.2使用MySQLWorkbench圖形化工具創(chuàng)建和管理數(shù)據表1.創(chuàng)建數(shù)據表打開MySQLWorkbench,在SCHEMAS欄中展開當前默認的cjgl數(shù)據庫,右擊Tables,在彈出式菜單中選擇CreateTable…,如圖4-2所示。圖4-2選擇CreateTable…任務1

操作學生成績管理數(shù)據庫的表打開創(chuàng)建數(shù)據表的界面,如圖4-3所示,在上方區(qū)域填寫表信息,如在TableName文本框中輸入數(shù)據表的名稱xs。在中間區(qū)域的列名欄填寫列名,在數(shù)據類型欄通過下拉列表選擇數(shù)據類型,通過控制PK列復選框的勾選情況來設置數(shù)據表的主鍵約束,若勾選,該列就是數(shù)據表的主鍵;取消勾選,則取消該列的主鍵約束。同理,可以通過NN列的勾選情況設置數(shù)據表的非空約束;通過UQ列的勾選情況設置數(shù)據表的唯一約束;通過AI列的勾選情況設置主鍵的值為自動增長等。在Default/Expression列中編輯字段的默認值或檢查約束的表達式。也可以在下方編輯區(qū)逐行編輯表的列信息。圖4-3創(chuàng)建表的界面任務1

操作學生成績管理數(shù)據庫的表編輯完數(shù)據表的基本信息后單擊Apply按鈕,彈出一個確認對話框,其中有自動生成的當前操作的SQL語句,如圖4-4所示。確認無誤后,單擊Apply按鈕,在彈出的對話框中直接單擊Finish按鈕,執(zhí)行相應的SQL語句,即可完成xs數(shù)據表的創(chuàng)建。此時,在cjgl數(shù)據庫的Tables節(jié)點下可以看到xs表。圖4-4創(chuàng)建表的SQL語句任務1

操作學生成績管理數(shù)據庫的表2.查看數(shù)據表右擊需要查看的xs數(shù)據表,在彈出式菜單中選擇TableInspector,如圖4-5所示,即可查看數(shù)據表xs的結構信息,如圖4-6所示。其中,Info選項卡中顯示了xs表的名稱、存儲引擎、列數(shù)、空間大小等信息。Columns選項卡中顯示了xs表中列的信息,包括列名、數(shù)據類型、默認值、非空標識、字符集、校對規(guī)則和使用權限等信息。DDL選項卡中顯示了生成xs表的SQL語句。圖4-5選擇TableInspector圖4-6數(shù)據表的結構信息任務1

操作學生成績管理數(shù)據庫的表3.修改數(shù)據表在SCHEMAS欄中的cjgl數(shù)據庫的Tables下,右擊需要修改的xs數(shù)據表,在圖4-5所示的彈出式菜單中選擇AlterTable…,即可打開圖4-7所示的窗口,修改數(shù)據表的基本信息和結構。在這里可以修改數(shù)據表的名稱,編輯數(shù)據表的列信息,包括編輯列名、編輯數(shù)據類型、新建列,右擊列通過彈出式菜單來操作列(如上下移動、復制、剪切、粘貼、刪除列),也可以通過上下拖曳列來調整列的順序編輯完成后,單擊Apply按鈕,可以預覽當前操作的SQL語句,單擊Apply按鈕,在彈出的對話框中直接單擊Finish按鈕,執(zhí)行相應的SQL語句,即可完成對xs數(shù)據表的修改。圖4-7修改數(shù)據表的窗口任務1

操作學生成績管理數(shù)據庫的表4.刪除數(shù)據表在SCHEMAS欄中的cjgl數(shù)據庫的Tables下,右擊需要刪除的數(shù)據表,在圖4-5所示的彈出式菜單中選擇DropTable…,打開圖4-8所示的刪除數(shù)據表對話框。如果選擇ReviewSQL,則會顯示刪除數(shù)據表操作對應的SQL語句,如圖4-9所示。單擊Execute按鈕就可以刪除xs表。如果選擇DropNow,則會直接執(zhí)行刪除操作。圖4-8刪除數(shù)據表對話框圖4-9刪除數(shù)據表操作對應的SQL語句表創(chuàng)建成功以后,需要先向表中插入數(shù)據,及時修改錯誤數(shù)據,當數(shù)據不再使用時,要刪除數(shù)據。對表中數(shù)據的增、刪、改、查是數(shù)據庫中最常見的數(shù)據操作,在MySQL中可以分別使用INSERT語句、UPDATE語句和DELETE語句實現(xiàn)對表中記錄的插入、更新和刪除操作。本任務將介紹在MySQL中如何使用命令方式和圖形化工具操作數(shù)據表中的記錄。任務2

操作學生成績管理數(shù)據庫中表的數(shù)據4.2.1用命令方式向數(shù)據表中插入數(shù)據在MySQL中,可以使用INSERT語句向數(shù)據表中插入一條或多條記錄,也可以向數(shù)據表中的指定列插入數(shù)據,還可以將一個表的查詢結果插入另一個表中。INSERT語句的基本語法格式如下。INSERTINTO表名[(<列名1>[,…,<列名n>])]VALUES(值1)[,…,(值n)];任務2

操作學生成績管理數(shù)據庫中表的數(shù)據1.向數(shù)據表中插入一條記錄向表中的所有列插入數(shù)據時有如下兩種方法。①指定全部列名。此時列名的順序可以不是表中列定義時的順序,但要保證值的順序與列的順序相同。②省略全部列名。此時需要為表的每一個列指定值,并且值的順序必須和數(shù)據表中列定義時的順序相同。【例題4.18】在學生成績管理數(shù)據庫cjgl中創(chuàng)建一個與學生表xs結構相同的表student,向表student中插入如下的一行記錄。(001112,劉國梁,計算機應用,男,1/30/20000:0:0,46)執(zhí)行如下SQL語句。任務2

操作學生成績管理數(shù)據庫中表的數(shù)據mysql>CREATETABLEstudentASSELECT*FROMxs;mysql>INSERTINTOstudent(姓名,學號,專業(yè)名,性別,出生時間,總學分,備注)VALUES('劉國梁','001112','計算機應用','男','2000-1-300:0:0',46,NULL);或mysql>INSERTINTOstudentVALUES('001112','劉國梁','計算機應用','男','2000-1-300:0:0',46,NULL);查看插入結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudent;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據2.向數(shù)據表中插入多條記錄當使用單條INSERT語句插入多條記錄時,只需將每條記錄用圓括號括起來即可,即一個列名對應多個列值。這樣處理比使用多條INSERT語句更快?!纠}4.19】向學生成績管理數(shù)據庫cjgl的表student中插入如下的兩行記錄。(001113,劉國梁,計算機應用,男,1/30/20000:0:0,46)(001114,馬龍,計算機應用,男,6/12/20000:0:0,46)任務2

操作學生成績管理數(shù)據庫中表的數(shù)據執(zhí)行如下SQL語句。mysql>INSERTINTOstudentVALUES('001113','劉國梁','計算機應用','男','2000-1-300:0:0',46,NULL),('001114','馬龍','計算機應用','男','2000-6-120:0:0',46,NULL);查看插入結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudent;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據3.向數(shù)據表中的指定列插入數(shù)據可以使用INSERT語句向表的指定列中插入數(shù)據,其他列的值為表定義時的默認值?!纠}4.20】向學生成績管理數(shù)據庫cjgl的表student中插入如下記錄。(001115,樊振東,男,2/12/20010:0:0)執(zhí)行如下SQL語句。mysql>INSERTINTOstudent(學號,姓名,性別,出生時間)VALUES('001115','樊振東','男','2001-2-120:0:0');查看插入結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudent;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據4.向數(shù)據表中插入查詢得到的記錄集在某些業(yè)務中,需要把查詢到的多條記錄復制到另一個表中來滿足業(yè)務需求。在MySQL數(shù)據庫中,利用INSERT語句可以將SELECT語句的查詢結果插入另一個表中,這樣可以快速地從一個或多個表中向另一個表中插入滿足條件的多條記錄。其基本語法格式如下。INSERTINTO表名1(列名1)SELECT列名2FROM表名2WHERE<條件表達式>LIMIT0,n;此語句的功能為將從表2中查詢到的符合條件的記錄插入表1中,表2中原來的記錄保持不變。其中,“LIMIT0,n”用于指定查詢出多少條記錄,即從第幾條記錄開始返回。任務2

操作學生成績管理數(shù)據庫中表的數(shù)據【例題4.21】向學生成績管理數(shù)據庫cjgl的表student中插入學生表xs的所有記錄。執(zhí)行如下SQL語句。mysql>INSERTINTOstudentSELECT*FROMxs;查看插入結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudent;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據4.2.2用命令方式更新數(shù)據表中的數(shù)據在MySQL中,使用UPDATE語句可以更新表中的所有記錄,也可以更新表中滿足更新條件的記錄,其基本語法格式如下。UPDATE表名SET<列名1>=值1[,<列名2>=值2,…][WHERE子句]任務2

操作學生成績管理數(shù)據庫中表的數(shù)據1.更新數(shù)據表中的所有記錄如果忽略WHERE子句,MySQL將更新表中所有的行?!纠}4.22】在學生成績管理數(shù)據庫cjgl中,將student表中的所有學生的總學分都增加10。執(zhí)行如下SQL語句。mysql>UPDATEstudentSET總學分=總學分+10;查看更新結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudent;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據2.更新數(shù)據表中的特定記錄根據WHERE子句的條件確定要更新的記錄。【例題4.23】在學生成績管理數(shù)據庫cjgl中,將student表中學號為001221的同學的專業(yè)改為“軟件技術”。執(zhí)行如下SQL語句。mysql>UPDATEstudentSET專業(yè)='軟件技術'WHERE學號='001221';查看更新結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudent;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據4.2.3用命令方式刪除數(shù)據表中的數(shù)據在MySQL中,可以使用DELETE語句或TRUNCATETABLE語句來刪除表數(shù)據。(1)使用DELETE語句刪除數(shù)據。使用DELETE語句可以刪除表的一行或者多行數(shù)據,其語法格式如下。DELETEFROM表名[WHERE子句]其中,WHERE子句用于指定刪除條件。如果沒有WHERE子句,將刪除表中的所有記錄。任務2

操作學生成績管理數(shù)據庫中表的數(shù)據【例題4.24】在學生成績管理數(shù)據庫cjgl中,刪除student表中學號為001112的記錄。刪除student表中所有網絡技術專業(yè)的學生記錄。執(zhí)行如下SQL語句。mysql>DELETEFROMstudentWHERE學號='001112';查看刪除結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudentWHERE學號='001112';執(zhí)行如下SQL語句mysql>DELETEFROMstudentWHERE專業(yè)名='網絡技術';查看刪除結果,執(zhí)行如下SQL語句。mysql>SELECT*FROMstudent;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據(2)使用TRUNCATETABLE語句刪除表使用TRUNCATETABLE語句可以刪除表中的所有數(shù)據,其語法格式如下。TRUNCATE[TABLE]表名【例題4.25】在學生成績管理數(shù)據庫cjgl中,刪除student表中的所有記錄。執(zhí)行如下SQL語句,查看刪除結果。mysql>DELETEFROMstudent;mysql>SELECT*FROMstudent;執(zhí)行如下SQL語句。mysql>TRUNCATETABLEstudent;查看表student是否存在,執(zhí)行如下SQL語句。mysql>SHOWTABLES;任務2

操作學生成績管理數(shù)據庫中表的數(shù)據(3)DETELE語句和TRUNCATE語句的區(qū)別①雖然兩者都能用于刪除表中的所有數(shù)據,但TRUNCATE語句只能用于刪除表中的所有記錄,而DELETE語句可用于刪除滿足條件的部分記錄。②DELETE是DML類型的語句。使用DELETE語句時,是逐行刪除記錄,每刪除一條記錄都會在日志中有相應記錄,配合事件回滾可以找回數(shù)據。TRUNCATE是DDL類型的語句。TRUNCATE語句在刪除表數(shù)據時是直接刪除原來的表,并重新創(chuàng)建一個同結構的表,不會在日志中記錄刪除的內容。因此,使用TRUNCATE語句刪除表數(shù)據后,原數(shù)據不可恢復,且執(zhí)行刪除操作的速度比DELETE語句快。③使用TRUNCATE語句刪除表中的數(shù)據后,系統(tǒng)會重新設置自增字段的計數(shù)器,默認初始值由1開始。而使用DELETE語句時,自增字段的值為刪除時該字段的最大值加1。當不需要某表時,用DROP語句;當要保留某表,但要刪除其中的所有記錄時,用TRUNCATE語句;當要刪除部分記錄時,用DELETE語句。任務2

操作學生成績管理數(shù)據庫中表的數(shù)據4.2.4使用MySQLWorkbench圖形化工具管理數(shù)據表中的數(shù)據

打開MySQLWorkbench,在SCHEMAS欄中展開當前默認的cjgl數(shù)據庫,展開Tables,右擊xs表,在圖4-5所示的彈出式菜單中選擇SelectRows–Limit1000,打開圖4-10所示的編輯數(shù)據表的界面,即可對xs表中的數(shù)據進行編輯操作,其中,Edit欄中包含3個按鈕,分別為“修改”“插入”“刪除”按鈕。任務2

操作學生成績管理數(shù)據庫中表的數(shù)據圖4-10編輯數(shù)據表數(shù)據編輯完成后單擊Apply按鈕,可以預覽當前操作的SQL語句,如圖4-11所示。在下一個彈出的對話框中直接單擊Finish按鈕,即可完成對數(shù)據表xs中數(shù)據的修改。任務2

操作學生成績管理數(shù)據庫中表的數(shù)據圖4-11當前操作的SQL語句索引是MySQL中十分重要的數(shù)據庫對象,常用于實現(xiàn)數(shù)據的快速查詢,是數(shù)據庫性能調優(yōu)技術的基礎。4.3.1認識索引1.索引的概念在MySQL中,訪問數(shù)據表的行數(shù)據有如下兩種方式。①順序訪問,即在表中從頭到尾逐行掃描,直到找到符合條件的所有行。順序訪問的實現(xiàn)比較簡單,但是當表中有大量數(shù)據的時候,效率非常低。②索引訪問,即通過遍歷索引來直接訪問表中的行。使用這種方式的前提是為表創(chuàng)建一個索引。所謂索引就是根據數(shù)據表中的一列或若干列,按照一定順序創(chuàng)建的列值與記錄行之間的對應關系表,類似于書籍的目錄,可以快速定位需要的信息,而無須從頭到尾查閱整本書。索引存儲了指定列數(shù)據值的指針,在列上創(chuàng)建了索引之后,查找數(shù)據時可以直接根據列的索引找到對應記錄行的位置,從而快速地查找到數(shù)據,提高了數(shù)據庫的查詢性能。任務3操作學生成績管理數(shù)據庫中的索引2.索引的類型索引是在存儲引擎中實現(xiàn)的,每種存儲引擎的索引不一定完全相同,并且每種存儲引擎也不一定支持所有索引類型。按照索引結構的特點,MySQL中支持的索引主要分為B-Tree索引和Hash索引兩種類型。MyISAM和InnoDB存儲引擎只支持B-Tree索引。按照索引值的特點,可以將索引分為以下幾類。(1)普通索引普通索引是MySQL中的基本索引類型,是由KEY或INDEX定義的索引,允許在定義索引的列中插入重復值和空值。它可以創(chuàng)建在任何數(shù)據類型的列上。任務3操作學生成績管理數(shù)據庫中的索引(2)唯一索引唯一索引是由UNIQUE定義的索引,索引列的值必須是唯一的,但允許有空值。如果是組合索引,則列值的組合必須是唯一的。主鍵索引是一種特殊的唯一索引。唯一索引要求所有數(shù)據行中任意兩行的被索引列或索引列組合中不能存在重復值,包括不能有兩個NULL。因此,創(chuàng)建唯一索引的列最好設置為NOTNULL。對于已創(chuàng)建了唯一索引的數(shù)據表,當向表中添加記錄或修改原有記錄時,系統(tǒng)將檢查添加的記錄或修改后的記錄是否滿足唯一性的要求,如果不滿足這個條件,系統(tǒng)會給出信息,提示操作失敗。任務3操作學生成績管理數(shù)據庫中的索引(3)單列索引和組合索引單列索引指只包含單個列的索引。組合索引是在數(shù)據表的多個列的組合上創(chuàng)建的索引,只有在查詢條件中使用了這些列的左邊列時,索引才會被使用。使用組合索引時遵循最左前綴集合原則。(4)全文索引全文索引是由FULLTEXT定義的索引,是指在定義索引的列上支持值的全文查找。它用于查找文本中的關鍵詞,而不是直接比較索引中的值。它只能創(chuàng)建在CHAR、VARCHAR或TEXT類型的列上。FULLTEXT用于搜索長文本時效果最好。任務3操作學生成績管理數(shù)據庫中的索引(5)空間索引空間索引是由SPATIAL定義的索引,只能在空間數(shù)據類型的列上創(chuàng)建,MySQL的空間數(shù)據類型有GEOMETRY、POINT、LINESTRING、POLYGON等4種。任務3操作學生成績管理數(shù)據庫中的索引3.索引的優(yōu)缺點在數(shù)據庫中創(chuàng)建索引主要有以下作用。①可以大大加快數(shù)據查詢的速度。②在使用ORDERBY、GROUPBY子句進行數(shù)據查詢時,利用索引可以顯著減少排序和分組的時間。③通過創(chuàng)建唯一索引可以保證數(shù)據表中每一行數(shù)據的唯一性。④實現(xiàn)表與表之間的參照完整性時,可以加速表與表之間的連接。任務3操作學生成績管理數(shù)據庫中的索引索引使查詢速度提高也是有代價的,主要表現(xiàn)在以下幾個方面。①索引本身需要占用磁盤空間。②創(chuàng)建和維護索引需要耗費時間,并且隨著數(shù)據量的增加耗費的時間也會增加。③當對表中的數(shù)據進行增、刪、改操作時,數(shù)據庫要執(zhí)行額外的操作來維護索引。例如,向有索引的表中插入記錄時,數(shù)據庫系統(tǒng)會按照索引進行排序,這樣就降低了插入記錄的速度,插入大量記錄時對速度的影響會更加明顯。所以,設計索引時需要綜合考慮索引的優(yōu)點和缺點,科學地設計,才能使數(shù)據庫整體性能提高。任務3操作學生成績管理數(shù)據庫中的索引4.索引的創(chuàng)建原則在實際操作過程中,創(chuàng)建索引時需要考慮以下原則。①索引并非越多越好。②不要在數(shù)據量小的表中創(chuàng)建索引。③避免對經常更新的表創(chuàng)建過多的索引。④盡量使用占用存儲空間小的、具有簡單數(shù)據類型的列創(chuàng)建索引。⑤為常作為查詢條件的列創(chuàng)建索引。⑥為經常需要進行排序、分組和連接操作的列創(chuàng)建索引。⑦不要在包含NULL值的列上創(chuàng)建索引。⑧在經常更新修改的列上不要創(chuàng)建索引。⑨選用字符串作為索引時,應盡可能指定前綴長度。任務3操作學生成績管理數(shù)據庫中的索引4.3.2用命令方式創(chuàng)建索引MySQL支持多種方法來創(chuàng)建索引,可以在創(chuàng)建表的同時通過指定索引列來創(chuàng)建索引,也可以在已有表上使用CREATEINDEX語句或ALTERTABLE語句創(chuàng)建索引,使用CREATEINDEX語句一次只能創(chuàng)建一個索引,使用ALTERTABLE語句一次可以創(chuàng)建多個索引。1.查看索引可以使用SHOWINDEX語句查看指定數(shù)據庫的表中已經存在的索引,其語法格式如下。SHOWINDEXFROM表名[FROM<數(shù)據庫名>]【例題4.26】查看成績管理數(shù)據庫cjgl的學生表xs中已定義的索引。執(zhí)行如下SQL語句。mysql>SHOWINDEXFROMxsFROMcjgl;任務3操作學生成績管理數(shù)據庫中的索引2.使用CREATEINDEX語句在已有表上創(chuàng)建索引可以使用CREATEINDEX語句為指定的表按照指定的列創(chuàng)建索引,其語法格式如下。CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY[索引名]

ON表名(列名[(length)][ASC|DESC][,…]);任務3操作學生成績管理數(shù)據庫中的索引【例題4.27】在成績管理數(shù)據庫cjgl中,為學生表xs的“姓名”列創(chuàng)建名為idx_xs_xm的普通索引。添加索引之前,使用SHOWINDEX語句查看指定表中已創(chuàng)建的索引。執(zhí)行如下SQL語句。mysql>CREATEINDEXidx_xs_xmONxs(姓名);使用SHOWCREATETABLE語句查看表結構,檢查索引是否創(chuàng)建成功。mysql>SHOWCREATETABLExs\G使用EXPLAIN語句查看索引是否正在使用。mysql>EXPLAINSELECT*FROMxsWHERE姓名='王元'\G任務3操作學生成績管理數(shù)據庫中的索引【例題4.28】在成績管理數(shù)據庫cjgl中,在成績表cj的“學號”列和“課程號”列上創(chuàng)建組合索引。執(zhí)行如下SQL語句。mysql>CREATEINDEXidx_cjONcj(學號,課程號);查看創(chuàng)建結果,執(zhí)行如下SQL語句。mysql>SHOWCREATETABLEcj\G任務3操作學生成績管理數(shù)據庫中的索引3.在創(chuàng)建表時創(chuàng)建索引在使用CREATETABLE語句創(chuàng)建索引時,可以采用直接在某個列定義后面添加INDEX的方式。其語法格式如下。CREATETABLE表名

(列名數(shù)據類型[完整性約束條件],

UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY索引名(列名[(length)][ASC|DESC]),)任務3操作學生成績管理數(shù)據庫中的索引【例題4.29】在成績管理數(shù)據庫cjgl中,在課程表kc的“課程名”列上創(chuàng)建唯一索引idx_kc。執(zhí)行如下SQL語句。mysql>CREATETABLEkc

(課程號CHAR(3)NOTNULLPRIMARYKEY,

課程名CHAR(16)NOTNULL,

開課學期TINYINTNOTNULLCHECK(開課學期>=1AND開課學期<=6),

學時TINYINTNOTNULL,

學分TINYINTNULL,

UNIQUEINDEXidx_kc(課程名));查看創(chuàng)建結果,執(zhí)行如下SQL語句。mysql>SHOWCREATETABLEkc\G任務3操作學生成績管理數(shù)據庫中的索引4.3.3用命令方式管理索引1.修改索引在MySQL中沒有修改索引的語句,可以通過刪除原索引,再根據需要創(chuàng)建一個同名的索引來實現(xiàn)修改索引的操作。2.刪除索引不再需要的索引會降低表的更新速度,影響數(shù)據庫的性能,可以使用DROPINDEX或ALTERTABLE語句將其刪除。DROPINDEX語句在內部被映射到ALTERTABLE語句中,其語法格式如下。DROPINDEX索引名ON表名任務3操作學生成績管理數(shù)據庫中的索引【例題4.30】在成績管理數(shù)據庫cjgl中,刪除xs表的索引idx_xs_xm。執(zhí)行如下SQL語句。mysql>SHOWINDEXFROMxs\Gmysql>DROPINDEXidx_xs_xmONxs;查看索引是否刪除,執(zhí)行如下SQL語句。mysql>SHOWINDEXFROMxs\G任務3操作學生成績管理數(shù)據庫中的索引4.3.4使用MySQLWorkbench圖形化工具創(chuàng)建和管理索引1.創(chuàng)建索引在MySQLWorkbench中,打開修改數(shù)據表的窗口,單擊下方的Indexes選項卡,打開圖4-12所示的創(chuàng)建和管理索引對話框任務3操作學生成績管理數(shù)據庫中的索引圖4-12創(chuàng)建和管理索引對話框在IndexName列中輸入索引名idx_xs_xm,從Type下拉列表中選擇UNIQUE,IndexColumns欄會自動顯示學生表xs中的所有列名,勾選“姓名”復選框,在IndexOptions欄中的StorageType下拉列表中選擇BTREE,其他參數(shù)采用默認值,如圖4-13所示。任務3操作學生成績管理數(shù)據庫中的索引圖4-13相關參數(shù)設置設置完成后,單擊Apply按鈕,出現(xiàn)圖4-14所示的應用腳本對話框。單擊Apply按鈕,進入完成對話框,單擊Finish按鈕,即可完成在cjgl數(shù)據庫的學生表xs的“姓名”列上創(chuàng)建唯一索引idx_xs_xm。在MySQLWorkbench中創(chuàng)建其他索引的操作步驟基本相同。任務3操作學生成績管理數(shù)據庫中的索引圖4-14應用腳本對話框2.管理索引(1)修改索引利用MySQLWorkbench修改索引,可以修改索引的名字、類型、索引引用列和索引參數(shù)等,操作方法與創(chuàng)建索引基本相同。(2)刪除索引在圖4-13所示的界面中,右擊要刪除的索引idx_xs_xm,在彈出式菜單中選擇DeleteSelected,如圖4-15所示。任務3操作學生成績管理數(shù)據庫中的索引圖4-15選擇DeleteSelected單擊Apply按鈕,出現(xiàn)圖4-16所示的刪除索引的應用腳本對話框。再單擊Apply按鈕,進入完成對話框。單擊Finish按鈕,即可完成索引的刪除。任務3操作學生成績管理數(shù)據庫中的索引圖4-16刪除索引的應用腳本對話框4.4.1認識數(shù)據完整性數(shù)據完整性是指數(shù)據庫中的數(shù)據在邏輯上的一致性和準確性。使用完整性約束的目的是防止不合法的數(shù)據進入基表中。數(shù)據庫的完整性是通過數(shù)據庫內容的完整性約束來實現(xiàn)的,用來表明數(shù)據庫的存在狀態(tài)是否合理。在MySQL中,數(shù)據完整性包括實體完整性、域完整性和參照完整性。每一種數(shù)據完整性,都可以由不同的約束類型來實現(xiàn)。對于數(shù)據庫的每個操作都要判定其是否符合完整性約束,只有當全部判定為符合時才可以執(zhí)行。當選擇使用哪種方法維護數(shù)據完整性時,需要考慮系統(tǒng)開銷和功能。一般來說,就系統(tǒng)開銷而言,使用約束的系統(tǒng)開銷最低,其次為使用默認值和規(guī)則的系統(tǒng),開銷最高的是使用觸發(fā)器和存儲過程的系統(tǒng);而就功能而言,功能最強的是觸發(fā)器和存儲過程,其次為默認值和規(guī)則,最后是約束。因此,使用何種方法,要看具體情況。對于一些基本的完整性邏輯,盡量使用約束或規(guī)則,如對字段值的合法性限定等,只有在需要復雜的業(yè)務規(guī)則時,才使用觸發(fā)器和存儲過程。任務4實現(xiàn)學生成績管理數(shù)據庫中表的數(shù)據完整性4.4.2用命令方式實現(xiàn)數(shù)據完整性1.實施實體完整性實體完整性又稱行完整性,它要求表中的每一行必須是唯一的??梢酝ㄟ^主鍵約束、唯一約束、索引或標識屬性來實現(xiàn)實體完整性。2.實施域完整性域完整性又稱列完整性,用于判斷某一個列的輸入是否有效,以保證數(shù)據庫中的數(shù)據取值的合理性。域完整性的實現(xiàn)方法有:通過定義列的數(shù)據類型來實現(xiàn);通過定義CHECK約束、默認值和非空屬性等來限定數(shù)據的格式及取值范圍,以確保有效的數(shù)據輸入列中。任務4實現(xiàn)學生成績管理數(shù)據庫中表的數(shù)據完整性3.實施參照完整性(1)參照完整性的概念參照完整性又稱引用完整性,要求對兩個關聯(lián)的表進行數(shù)據插入和刪除操作時,它們之間的數(shù)據是一致的。這兩個表中一個稱為主表,一個稱為從表。所謂主表也稱父表或引用表(ReferencedTable),即對于兩個具有關聯(lián)關系的表而言,關聯(lián)字段中主鍵所在的那個表,而關聯(lián)字段中外鍵所在的那個表稱為從表也稱子表或被引用表。例如對于cjgl數(shù)據庫中的學生表和成績表而言,學號是學生表的主鍵、成績表的外鍵,所以學生表是主表,成績表是從表。主表和從表間的參照完整性是通過定義主鍵和外鍵之間的對應關系來實現(xiàn)的。任務4實現(xiàn)學生成績管理數(shù)據庫中表的數(shù)據完整性外鍵用來建立主表與從表的關聯(lián)關系,為兩個表的數(shù)據建立連接。它可以由一列或多列組成。外鍵可以不是從表的主鍵,但必須關聯(lián)主表的主鍵,且關聯(lián)字段的個數(shù)必須相同、數(shù)據類型必須匹配,否則系統(tǒng)會報錯。外鍵可以為空值,若不為空值,則每一個外鍵值必須等于主表中主鍵的某個值。從表定義外鍵后,不允許刪除主表中具有關聯(lián)關系的行,從而保持兩個表數(shù)據的一致性、完整性。一個表可以有一個或多個外鍵。例如,對于cjgl數(shù)據庫中的課程表和成績表來說,將課程號定義為課程表的主鍵、成績表的外鍵,從而建立主表和從表之間的聯(lián)系,實現(xiàn)了參照完整性。此時,成績表有學號和課程號兩個外鍵。任務4實現(xiàn)學生成績管理數(shù)據庫中表的數(shù)據完整性(2)實現(xiàn)參照完整性的方法可通過創(chuàng)建外鍵約束的方法來實物表的參照完整性。①創(chuàng)建表時定義外鍵約束。在CREATETABLE語句中,通過FOREIGNKEY關鍵字來指定外鍵,其語法格式如下。CREATETABLE表名(外鍵列名數(shù)據類型[FOREIGNKEY]REFERENCES主表名(主鍵列名),…);或[CONSTRAINT外鍵約束名]FOREIGNKEY(外鍵列名)REFERENCES主表名(主鍵列名)任務4實現(xiàn)學生成績管理數(shù)據庫中表的數(shù)據完整性【例題4.31】在成績管理數(shù)據庫cjgl中創(chuàng)建學生表xs和成績表cj,同時實現(xiàn)兩表的參照完整性在定義外鍵前必須先創(chuàng)建主表并定義主表的主鍵。主表為學生表xs,定義學號為主鍵。執(zhí)行如下SQL語句。mysql>CREATETABLExs('學號'CHAR(6)NOTNULLPRIMARYKEY,'姓名'CHAR(8)NOTNULL,'專業(yè)名'CHAR(10)NULL,'性別'ENUM('男','女')NOTNULLDEFAULT'男'CHECK(性別='男'OR性別='女'),'

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論