《MySQL數(shù)據(jù)原理與應用》 課件 第7、8章 視圖與索引、數(shù)據(jù)處理之增刪改_第1頁
《MySQL數(shù)據(jù)原理與應用》 課件 第7、8章 視圖與索引、數(shù)據(jù)處理之增刪改_第2頁
《MySQL數(shù)據(jù)原理與應用》 課件 第7、8章 視圖與索引、數(shù)據(jù)處理之增刪改_第3頁
《MySQL數(shù)據(jù)原理與應用》 課件 第7、8章 視圖與索引、數(shù)據(jù)處理之增刪改_第4頁
《MySQL數(shù)據(jù)原理與應用》 課件 第7、8章 視圖與索引、數(shù)據(jù)處理之增刪改_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

視圖與索引第7章通過本課程的學習,您將應該:了解數(shù)據(jù)庫的相關概念熟悉數(shù)據(jù)庫工具的使用熟悉SQL語言的規(guī)則與規(guī)范熟練掌握MySQL數(shù)據(jù)庫管理方法熟練掌握MySQL表結(jié)構(gòu)管理方法熟練掌握表記錄的檢索方法熟練掌握視圖與索引的使用方法熟練掌握數(shù)據(jù)處理之增刪改熟練掌握存儲過程與游標的使用方法熟練掌握存儲函數(shù)的應用熟練掌握觸發(fā)器的應用熟練掌握事務的基本特性和應用場景熟練掌握數(shù)據(jù)庫安全及管理熟練掌握MySQL數(shù)據(jù)庫備份和恢復操作了解利用MySQL+Java開發(fā)一個數(shù)據(jù)庫學習系統(tǒng)并部署課程目標項目部署成功本講教學目標熟練創(chuàng)建視圖和索引及增刪改查操作。熟練使用數(shù)據(jù)庫圖形化管理工具進行視圖和索引的實際操作。通過本講的學習,您將可以:1.OPTION2.OPTION視圖的應用目錄Content視圖01索引02課業(yè)任務03常見錯誤及解決方案04視圖017.1.1創(chuàng)建視圖視圖是存儲在數(shù)據(jù)庫中的查詢的語句,它的存在主要出于兩個原因:首先是便捷原因,它將復雜的查詢簡單化,更利于用戶理解和使用;另一個原因是安全原因,視圖可以隱藏一些數(shù)據(jù),例如,它可以用視圖顯示學生信息表中的姓名、年齡、專業(yè),而不顯示聯(lián)系電話和身份證號碼等信息。視圖是一個虛擬表,是從數(shù)據(jù)庫中的一個或多個表中導出來的表,其內(nèi)容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,數(shù)據(jù)庫中只存放了視圖的定義,而沒有存放視圖中的數(shù)據(jù)。這些數(shù)據(jù)存放在原來的表中。使用視圖查詢數(shù)據(jù)時,數(shù)據(jù)庫系統(tǒng)會從原來的表中取出對應的數(shù)據(jù)。因此,視圖中的數(shù)據(jù)是依賴于原來的表中的數(shù)據(jù)的。一旦表中的數(shù)據(jù)發(fā)生改變,顯示在視圖中的數(shù)據(jù)也會發(fā)生改變。對所引用的基礎表來說,視圖的作用類似于篩選,定義視圖的篩選可以來自當前或其他數(shù)據(jù)庫的一個或多個表,或者其他視圖。通過視圖進行查詢沒有任何限制,通過視圖修改數(shù)據(jù)時的限制也很少。7.1.1創(chuàng)建視圖創(chuàng)建視圖是指在已經(jīng)存在的數(shù)據(jù)庫表上建立視圖。視圖可以建立在一個表中,也可以建立在多個表中。1.查看創(chuàng)建視圖的權限創(chuàng)建視圖需要具有CREATEVIEW的權限,同時應該具有查詢涉及的列的SELECT權限。可以使用SELECT語句來查詢這些權限信息,查詢語法如下。SELECTSelect_priv,Create_view_priv

FROMmysql.user

WHEREuser='用戶名';

(1)Selete_priv表示用戶是否具有SELECT權限,Y表示擁有SELECT權限,N表示沒有。(2)Create_view_priv表示用戶是否具有CREATEVIEW權限。(3)mysql.user表示MySQL自帶的數(shù)據(jù)庫mysql下的user表。(4)用戶名表示為當前使用MySQL數(shù)據(jù)庫的用戶名稱。說明:7.1.1創(chuàng)建視圖【案例7.1】查詢MySQL中root用戶是否具有創(chuàng)建視圖的權限。登錄MySQL終端后利用查詢權限語法查詢登錄所用的root用戶創(chuàng)建視圖的權限,執(zhí)行的SQL語句如下。SELECTSelect_priv,Create_view_priv

FROMmysql.user

WHEREuser='root';“root”為當前登錄的用戶名稱。說明:執(zhí)行上述SQL語句,在查詢結(jié)果中查看當前權限,右如圖所示。由運行結(jié)果可以得知:結(jié)果中字段“Select_priv”和“Create_view_priv”的值都為Y,表示root用戶具有SELECT和CREATEVIEW,即查看和創(chuàng)建視圖的權限。7.1.1創(chuàng)建視圖2.創(chuàng)建視圖在MySQL中,使用CREATEVIEW語句創(chuàng)建視圖,其語法格式如下:CREATE[ALGORITHM] VIEW視圖名[(屬性清單)] ASSELECT語句;(1)ALGORITHM:可選參數(shù),表示視圖選擇的算法。(2)視圖名:表示要創(chuàng)建的視圖名稱。(3)屬性清單:可選參數(shù),指定視圖中各個屬性的名詞,默認情況下與SELECT語句中查詢的屬性相同。(4)SELECT語句:一個完整的查詢語句,表示從某個表中查出某些滿足條件的記錄,將這些記錄導入視圖中。說明:7.1.1創(chuàng)建視圖【案例7.2】創(chuàng)建視圖查找學生表的全部信息,命名為view_stu。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。CREATEVIEWview_stu

ASSELECT*FROMtb_student;執(zhí)行上述SQL語句,創(chuàng)建一個名稱為“view_stu”的視圖,如下圖所示,視圖創(chuàng)建成功。7.1.1創(chuàng)建視圖創(chuàng)建視圖時需要注意以下幾點:(1)運行創(chuàng)建視圖的語句需要用戶具有創(chuàng)建視圖的權限,若加了[orreplace]參數(shù),還需要用戶具有刪除視圖的權限。(2)在使用SELECT語句時不能包含F(xiàn)ROM子句中的子查詢、不能引用系統(tǒng)或用戶變量以及不能引用預處理語句參數(shù)。(3)在存儲子程序內(nèi),定義不能引用子程序參數(shù)或者局部變量。(4)在定義中引用的表或視圖必須存在。但是,創(chuàng)建視圖后,能夠舍棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可使用CHECKTABLE語句。(5)在定義中不能引用temporary表,不能創(chuàng)建temporary視圖。(6)在視圖定義中命名的表必須已存在。(7)不能將觸發(fā)程序與視圖關聯(lián)在一起。(8)在視圖定義中允許使用ORDERBY,但是,如果從特定視圖進行了選擇,而該視圖使用了具有自己ORDERBY的語句,它將被忽略。7.1.2查看視圖1.使用DESCRIBE語句查看視圖使用DESCRIBE語句時,可以將DESCRIBE縮寫成DESC,DESC語句如下。DESC視圖名;查看視圖是指查看已存在的視圖,查看視圖必須要有SHOWVIEW權限。查看視圖的方法主要包括使用DESCRIBE語句、SHOWTABLESTATUS語句、SHOWCREATEVIEW語句等。7.1.2查看視圖【案例7.3】使用DESC語句查詢【案例7.2】創(chuàng)建的視圖view_stu的結(jié)構(gòu)。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。DESCview_stu;執(zhí)行上述SQL語句,查詢視圖中的結(jié)構(gòu)如下圖所示,能夠了解視圖中各個字段的簡單信息。7.1.2查看視圖2.使用SHOWTABLESTATUS語句查看視圖在MySQL中如果需要查看視圖信息,可以使用SHOWTABLESTATUS語句,其語法格式如下。在MySQL的命令行窗口中,語句結(jié)束符可以為“;”、“\g”或者“\G”。其中,“;”和“\g”的作用是一樣的。都是按照表格的形式顯示結(jié)果,而“\G”則會把原來的列按照行顯示。說明:SHOWTABLESTATUSLIKE'視圖名';

【案例7.4】查看視圖view_stu的信息。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SHOWTABLESTATUSLIKE'view_stu'\G7.1.2查看視圖執(zhí)行上述SQL語句,查看視圖view_stu的結(jié)構(gòu)。視圖結(jié)構(gòu)如左下圖所示。以同樣的方式查詢學生表,得到如右下圖所示,學生表的信息。對比查看結(jié)果可以觀察出,視圖中存儲引擎、數(shù)據(jù)長度等信息都顯示為NULL,而學生表是具有具體參數(shù)的,說明了視圖為虛擬表,與普通數(shù)據(jù)表有所區(qū)別。

7.1.2查看視圖3.使用SHOWCREATEVIEW語句查詢視圖在MySQL中我們還可以通過SHOWCREATEVIEW語句查看視圖的詳細定義,其語法如下。SHOWCREATEVIEW視圖名;【案例7.5】查看視圖view_stu的詳細定義。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SHOWCREATEVIEWview_stu\G執(zhí)行上述SQL語句,查看視圖的詳細定義,其定義如右圖所示。7.1.3修改視圖修改視圖是指修改數(shù)據(jù)庫中已存在的表的定義。當基本表的某些字段發(fā)生改變時,可以通過修改視圖來保持視圖和基本表之間的一致。MySQL中可以通過CREATEORREPLACEVIEW語句和ALTERVIEW語句來修改視圖。7.1.3修改視圖1.使用CREATEORREPLACEVIEW語句修改視圖CREATEORREPLACEVIEW語句在MySQL的使用中可以非常靈活,在視圖已經(jīng)存在的情況下,對視圖進行修改;若視圖不存在時,則可以創(chuàng)建視圖。其語法如下。CREATEORREPLACEVIEW視圖[(屬性清單)]ASSELECT語句;【案例7.6】將視圖view_stu的字段修改為name、gender、height。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。CREATEORREPLACEVIEWview_stu(name,gender,height)ASSELECTstudent_name,student_gender,student_heightFROMtb_student;7.1.3修改視圖執(zhí)行上述SQL語句,“view_stu(name,gender,height)”為指定的所需要修改的視圖及其字段,分別對應SELECT子句中的三個字段。如下圖所示,視圖修改成功。使用DESC語句重新查詢view_stu視圖,執(zhí)行SQL語句“DESCview_stu;”,執(zhí)行結(jié)果如下圖所示。從左圖可以得知,視圖修改后只剩下三個字段,表示修改成功。7.1.3修改視圖2.使用ALTERVIEW語句修改視圖ALTERVIEW語句改變了視圖的定義,包括索引視圖,但不影響所依賴的存儲過程或觸發(fā)器。該語句與CREATEVIEW語句有著同樣的限制,如果刪除并重建了一個視圖,就必須重新為它分配權限。【案例7.7】修改視圖view_stu以學生表為基本表。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。ALTERVIEWview_stuASSELECT*FROMtb_student;ALTERVIEW語句語法如下。ALTERVIEW視圖名ASSELECT語句;(1)視圖名為指定修改的視圖名稱。(2)SELECT語句為重新定義視圖內(nèi)容。說明:7.1.3修改視圖執(zhí)行上述SQL語句,指定視圖“view_stu”,內(nèi)容修改SELECT子句中查詢學生表所有信息。如下圖所示,語句執(zhí)行成功。修改成功后,執(zhí)行SQL語句“SELECT*FROMview_stu;”,如下圖所示查看視圖。同理可知,視圖的定義也被修改。7.1.4更新視圖1.更新視圖的方法對于插入、更新和刪除操作,其語法格式與對表格數(shù)據(jù)增刪改相似,以更新為例。更新視圖其語法格式如下。(1)視圖名為指定更新的視圖名稱。(2)字段1對應值1,字段2對應值2,以此類推。更新規(guī)范與數(shù)據(jù)表的數(shù)據(jù)更新一致。說明:UPDATE視圖名

SET字段1=值1,字段2=值2...[WHERE條件表達式];

因為視圖是一個虛擬表,其中沒有數(shù)據(jù),所以通過視圖更新時,實際上都是在基本表中執(zhí)行更新操作。更新視圖是指通過視圖來插入(INSERT)、更新(UPDATE)和刪除(DELETE)表中的數(shù)據(jù)。但是,更新視圖時,只能更新權限范圍內(nèi)的數(shù)據(jù),超出了范圍就不能更新。7.1.4更新視圖【案例7.8】修改視圖view_stu中姓黃的同學身高為0。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。UPDATEview_stu

SETstudent_height=0WHEREstudent_name

LIKE'黃%';執(zhí)行上述SQL語句,指定更新“view_stu”,將字段“student_height”賦值為0,指定條件范圍為黃姓的同學。如下圖所示,視圖更新成功。7.1.4更新視圖修改成功后,執(zhí)行SQL語句“SELECTstudent_name,student_height

FROMview_stu

WHEREstudent_name

LIKE‘黃%’;”和“SELECTstudent_name,student_height

FROMtb_student

WHEREstudent_name

LIKE‘黃%’;”查看更新后的視圖數(shù)據(jù)和基本表數(shù)據(jù),如下圖所示查看兩表數(shù)據(jù)。由此可見,對視圖的修改實際上是實現(xiàn)在基本表中的。相對地,對視圖的增加和刪除可以參考第8章

數(shù)據(jù)處理之增刪改。7.1.4更新視圖(1)視圖中包含COUNT()、SUM()、MAX()和MIN()等函數(shù)時。例如:雖然可以在視圖中更新數(shù)據(jù),但是一般情況下,最好將視圖作為查詢數(shù)據(jù)的虛擬表,而不是通過視圖更新數(shù)據(jù)。因為在進行更新操作時很容易由于考慮不全面而導致操作失敗。注意:以下這類情況是不能更新視圖的。CREATEVIEW視圖名(字段1,字段2)ASSELECT字段3,COUNT(字段4)FROM數(shù)據(jù)表;

(2)視圖中包含UNION、UNIONALL、DISTINCT、GROUPBY和HAVING等關鍵字。例如:CREATEVIEW視圖名(字段1,字段2)ASSELECT子句

GROUPBY字段3;

(3)常量視圖。例如:CREATEVIEW視圖名(字段1,字段2)ASSELECT常量字符

AS別名;

7.1.4更新視圖(4)視圖中的SELECT中包含子查詢。例如:(5)由不可更新的視圖導出的視圖。例如:CREATEVIEW視圖名1ASSELECT*FROM視圖名2;(6)創(chuàng)建視圖時,ALGORITHM為TEMPTABLE類型。例如:(7)視圖對應的表上存在沒有默認值的列,而且該列沒有包含在視圖里。例如,表中包含的name字段沒有默認值,但是視圖中不包括該字段,那么這個視圖是不能更新的。因為在更新視圖時,這個沒有默認值的記錄將沒有值插入,也沒有NULL值插入。CREATEVIEW視圖名(字段)ASSELECT子句(SELECT子查詢);

CREATEVIEWALGORITHM=TEMPTABLE視圖名ASSELECT*FROM數(shù)據(jù)表;總結(jié):在視圖的數(shù)據(jù)和基本表的數(shù)據(jù)不同時,無法更新或者創(chuàng)建視圖。7.1.5刪除視圖“IFEXISTS”表示執(zhí)行操作前先檢測是否存在滿足該語句的對象,存在即可繼續(xù)執(zhí)行,不存在則停止操作。說明:DROPVIEWIFEXISTS視圖名;刪除視圖是指刪除數(shù)據(jù)庫中已存在的視圖。刪除視圖時,只能刪除視圖的定義,不會刪除數(shù)據(jù)。MySQL中,使用DROPVIEW語句來刪除視圖。但是,用戶必須擁有DROP權限。DROPVIEW其語法格式如下。7.1.5刪除視圖【案例7.9】刪除視圖view_stu。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。DROPVIEWIFEXISTSview_stu;執(zhí)行上述SQL語句,如下圖所示,視圖刪除成功。操作成功后,執(zhí)行“SHOWCREATEVIEWview_stu;”SQL語句,如下所示,視圖不存在表示刪除成功。索引027.2索引索引是一種將數(shù)據(jù)庫中單列或者多列的值進行排序的結(jié)構(gòu)。應用索引,可以大幅度提高查詢的速度,還可以降低服務器的負載。用戶查詢數(shù)據(jù)時,系統(tǒng)可以不必遍歷數(shù)據(jù)表中的所有記錄,而是查詢索引列。一般形式的數(shù)據(jù)查詢是通過遍歷數(shù)據(jù)后,尋找數(shù)據(jù)庫中的匹配記錄而實現(xiàn)的。與一般形式的查詢相比,索引就像一本書的目錄。通過目錄可以直接查詢到書的某節(jié)。大大縮短了查詢時間,提高了查找速度。所以,使用索引可以有效地提高數(shù)據(jù)庫系統(tǒng)的整體性能。應用MySQL數(shù)據(jù)庫時,用戶在查詢數(shù)據(jù)時并非總需要應用索引來優(yōu)化查詢。誠然,使用索引可以提高檢索數(shù)據(jù)的速度。但是,創(chuàng)建和維護索引是需要耗費時間的,并且所耗費的時間與數(shù)據(jù)量的大小成正比;另外,索引需要占用物理空間,會給數(shù)據(jù)的維護造成很多麻煩。整體來說,索引可以提高查詢的速度,但是會影響用戶操作數(shù)據(jù)庫時的插入操作。因為,向有索引的表中插入記錄時,數(shù)據(jù)庫系統(tǒng)會按照索引進行排序。所以,用戶可以將索引刪除后插入數(shù)據(jù),當數(shù)據(jù)插入操作完成后,再重新創(chuàng)建索引。7.2索引MySQL的索引包括普通索引、唯一索引、全文索引、單列索引、多列索引和空間索引等。普通索引普通索引即無任何限制條件的索引,該索引可以在任何數(shù)據(jù)類型中創(chuàng)建。字段本身的約束條件可以判斷其值是否為空或唯一。唯一索引使用UNIQUE參數(shù)可以設置唯一索引。創(chuàng)建該索引時,索引的值必須唯一,通過唯一索引,用戶可以快速定位某條記錄,主鍵是一種特殊的唯一索引。全文索引使用FULLTEXT參數(shù)可以設置索引為全文索引。全文索引只能創(chuàng)建在CHAR、VARCHAR或TEXT類型的字段上。查詢數(shù)據(jù)量較大的字符串類型的字段時,使用全文索引可以提高查詢速度。例如,查詢帶有文章回復內(nèi)容的字段,可以應用全文索引方式。需要注意的是,在默認情況下,應用全文索引時大小寫不敏感。如果索引的列使用二進制排序,可以執(zhí)行大小寫敏感的全文索引。7.2索引單列索引單列索引是對應一個字段的索引,它包括前3種索引方式。應用該索引的條件是保證該索引值對應一個字段。多列索引多列索引是在表的多個字段上創(chuàng)建一個索引。該索引指向創(chuàng)建時對應的多個字段,用戶可以通過這幾個字段進行查詢。要想應用該索引,用戶必須使用這些字段中的第一個字段??臻g索引使用SPATIAL參數(shù)可以設置索引為空間索引??臻g索引只能建立在空間數(shù)據(jù)類型上,這樣可以提高系統(tǒng)獲取空間數(shù)據(jù)的效率。MySQL中只有MyISAM存儲引擎支持空間檢索,而且索引的字段不能為空值。7.2.1創(chuàng)建索引1.在建立數(shù)據(jù)表時創(chuàng)建索引在創(chuàng)建數(shù)據(jù)表時可以創(chuàng)建索引,這種方式較直接、方便且易用。在建立數(shù)據(jù)表時創(chuàng)建索引的基本語法結(jié)構(gòu)如下。CREATETABLE表名(字段1數(shù)據(jù)類型[約束條件],...,[UNIQUE|FULLTEXT|SPATIAL]INDEX[別名](字段1[(長度)],...[ASC|DESC]));創(chuàng)建索引是指在某個表的至少一列中建立索引,以提高表的訪問速度和數(shù)據(jù)庫性能。本節(jié)通過幾種不同的方式創(chuàng)建索引,包括在建立數(shù)據(jù)庫時創(chuàng)建索引、在已建立的數(shù)據(jù)表中創(chuàng)建索引和修改數(shù)據(jù)表結(jié)構(gòu)添加索引。7.2.1創(chuàng)建索引說明:(1)UNIQUE:可選項,表明索引為唯一索引。(2)FULLTEXT:可選項,表明索引為全文索引。(3)SPATIAL:可選項,表明索引為空間索引。(4)長度:可選項,指索引長度,必須是字符串類型才可以使用。(5)ASC/DESC:可選項,表示升序/降序排序。7.2.1創(chuàng)建索引【案例7.10】在db_study數(shù)據(jù)庫中創(chuàng)建普通索引。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。CREATETABLEtest(aaINTNOTNULL,bb

VARCHAR(30)NULL,INDEX(aa));執(zhí)行上述SQL語句,創(chuàng)建數(shù)據(jù)表test,其中有兩個字段分別為“aa”和“bb”,INDEX(aa)意為對字段aa創(chuàng)建索引。如下圖所示,索引創(chuàng)建成功。7.2.1創(chuàng)建索引其他類型的索引即在普通索引的基礎上加上約束條件或改變字段數(shù)量即可。要注意的是,全文索引只能作用在CHAR、VARCHAR、TEXT類型的字段上;單列索引則不需要約束參數(shù),僅需指定單列字段名;多列索引則是指定多個字段名。說明:操作成功后,使用SHOWINDEX語句查看索引,執(zhí)行SQL語句“SHOWINDEXFROMtest\G”,如下圖所示,含有一個索引。7.2.1創(chuàng)建索引2.在已建立的數(shù)據(jù)表中創(chuàng)建索引在MySQL中,不但可以在創(chuàng)建數(shù)據(jù)表時創(chuàng)建索引,還可以在已創(chuàng)建的數(shù)據(jù)表創(chuàng)建索引。方式1:直接創(chuàng)建索引直接創(chuàng)建索引基本語法格式如下。CREATE[UNIQUE|FULLTEXT|SPATIAL]INDEX索引名ON表名(字段名

[(長度)],...[ASC|DESC]);

同個字段可以有多個索引。與建立數(shù)據(jù)表時創(chuàng)建索引相同,在已建立的數(shù)據(jù)表中創(chuàng)建索引同樣包含6種索引方式。說明:【案例7.11】在test數(shù)據(jù)表中創(chuàng)建普通索引。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。CREATEINDEXiiONtest(aa);7.2.1創(chuàng)建索引操作成功后,使用SHOWINDEX語句查看索引,執(zhí)行SQL語句“SHOWINDEXFROMtest;”,如下圖所示,含有兩個索引。執(zhí)行上述SQL語句,指定test數(shù)據(jù)表中的字段aa創(chuàng)建名稱為“ii”的索引。如下圖所示,索引創(chuàng)建成功。7.2.1創(chuàng)建索引說明:以下分別列出建立其他類型索引命令。CREATEUNIQUEINDEX索引名ON數(shù)據(jù)表名(字段名);--------------------唯一索引CREATEFULLTEXTINDEX索引名ON數(shù)據(jù)表名(字段名);------------------全文索引CREATEINDEX索引名ON數(shù)據(jù)表名(字段名(長度));---------------------單列索引CREATEINDEX索引名ON數(shù)據(jù)表名(字段名1,字段名2...);--------------多列索引CREATESPATIALINDEX索引名

ON數(shù)據(jù)表名(字段名);-------------------空間索引

7.2.1創(chuàng)建索引方式2:修改數(shù)據(jù)表結(jié)構(gòu)添加索引修改已經(jīng)存在表上的索引,可以通過ALTERTABLE語句為數(shù)據(jù)表添加索引,其基本格式如下?!景咐?.12】在test數(shù)據(jù)表中添加普通索引。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。ALTERTABLEtestADDINDEXbb(aa);ALTERTABLE表名ADD[UNIQUE|FULLTEXT|SPATIAL]INDEX索引名(字段名

[(長度)],...[ASC|DESC]);

7.2.1創(chuàng)建索引操作成功后,使用SHOWINDEX語句查看索引,執(zhí)行SQL語句“SHOWINDEXFROMtest;”,如下圖所示,含3個索引。執(zhí)行上述SQL語句,修改test數(shù)據(jù)表,對其字段aa添加名稱為“bb”的索引。如下圖所示,索引添加成功。7.2.1創(chuàng)建索引說明:以下分別列出添加其他類型索引命令。ALTERTABLE表名ADDUNIQUEINDEX索引名(字段名);------------------唯一索引ALTERTABLE表名ADDFULLTEXTINDEX索引名(字段名);----------------全文索引ALTERTABLE表名ADDINDEX索引名(字段名(長度));-------------------單列索引ALTERTABLE表名ADDINDEX索引名(字段名1,字段名2,...);-----------多列索引ALTERTABLE表名

ADDSPATIALINDEX索引名(字段名);-----------------空間索引

7.2.2刪除索引在MySQL中,創(chuàng)建索引后,如果用戶不再需要該索引,則可以刪除指定表的索引。因為這些已經(jīng)建立但不常使用的索引,一方面會占用系統(tǒng)資源,另一方面可能導致更新速度下降,這極大地影響了數(shù)據(jù)表的性能。刪除索引可以通過DROP語句來實現(xiàn)。其基本語法格式如下?!景咐?.13】刪除test數(shù)據(jù)表中的索引。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。DROPINDEXaaONtest;DROPINDEX索引名

ON數(shù)據(jù)表名;

7.2.2刪除索引操作成功后,使用SHOWCREATETABLE語句查看索引,執(zhí)行SQL語句“SHOWCREATETABLEtest;”,如下圖所示,剩余2個索引。執(zhí)行上述SQL語句,刪除數(shù)據(jù)表test中的索引aa。如下圖所示,索引刪除成功。課業(yè)任務037.3課業(yè)任務課業(yè)任務7-1創(chuàng)建視圖求計算機系的人數(shù)課業(yè)任務7-2創(chuàng)建視圖求每位同學的成績課業(yè)任務7-3創(chuàng)建唯一索引課業(yè)任務7-4使用Workbench工具創(chuàng)建索引課業(yè)任務7-5使用Navicat工具創(chuàng)建視圖王小明想利用MySQL+Java開發(fā)一個數(shù)據(jù)庫學習系統(tǒng),在熟悉了MySQL數(shù)據(jù)庫表記錄的檢索知識后,需熟悉MySQL數(shù)據(jù)庫視圖和索引的實際操作,熟練掌握該操作將為后續(xù)開發(fā)數(shù)據(jù)庫學習系統(tǒng)打下良好的基礎,現(xiàn)通過5個課業(yè)任務來完成。具體請見實驗6常見錯誤及解決方案047.4.1錯誤7-1創(chuàng)建視圖失敗7.4.2錯誤7-2創(chuàng)建唯一索引失敗具體請見實驗67.4常見錯誤及解決方案選擇題填空題判斷題操作題(1)視圖的作用有(

)。A.簡單性B.安全性C.邏輯數(shù)據(jù)獨立性D.以上都是(2)下列選項中,不是索引的類型的是(

)。A.唯一索引B.普通索引C.空間索引D.時間索引DD選擇題填空題判斷題操作題(3)下列選項中,不是創(chuàng)建索引時的可選項的是(

)。A.UNIONB.FULLTEXTC.SPATIALD.INDEX(4)在MySQL中,刪除索引的關鍵字是(

)。A.DROPB.DELETEC.DESCRIBED.以上說法都不正確AA選擇題填空題判斷題操作題(5)創(chuàng)建視圖最基本需要(

)兩個權限。A.查看和刪除B.創(chuàng)建和刪除C.創(chuàng)建和查看D.以上都不正確C(2)請寫出查詢的類型,分別是()。(3)根據(jù)查詢的類型寫出對應類型的關鍵字()。(4)相等連接和自然連接屬于()。(5)WHERE和HAVING哪個關鍵字后可以使用聚合函數(shù)()。選擇題填空題判斷題操作題(1)請寫出視圖的作用,分別是()。答案:(1)1.它將復雜的查詢簡單化,更利于用戶理解和使用;2.視圖可以隱藏一些數(shù)據(jù),保護數(shù)據(jù)庫的安全性。3.降低數(shù)據(jù)冗余:視圖可以將多個表中的數(shù)據(jù)進行聯(lián)接,并以虛擬表的形式呈現(xiàn)。這樣可以避免在數(shù)據(jù)庫中存儲冗余的數(shù)據(jù),提高了存儲空間的利用率。(2)請寫出索引的類型,分別是()。答案:(2)索引包括普通索引、唯一索引、全文索引、單列索引、多列索引和空間索引等。(2)請寫出查詢的類型,分別是()。(3)根據(jù)查詢的類型寫出對應類型的關鍵字()。(4)相等連接和自然連接屬于()。(5)WHERE和HAVING哪個關鍵字后可以使用聚合函數(shù)()。選擇題填空題判斷題操作題(3)根據(jù)索引的類型寫出索引不同類型對應的可選項或關鍵字()。答案:(3)主鍵索引:可選項或關鍵字為:PRIMARYKEY。唯一索引:可選項或關鍵字為:UNIQUE。3.聚簇索引:可選項或關鍵字為:CLUSTERED。4.非聚簇索引:可選項或關鍵字為:NONCLUSTERED。(4)刪除視圖時應該使用哪個關鍵字()。答案:(4)刪除視圖時應該使用關鍵字DROP選擇題填空題判斷題操作題(5)請至少默寫出創(chuàng)建索引兩個語法()。答案:(5)使用CREATEINDEX語句創(chuàng)建索引,語法為:CREATEINDEXindex_nameONtable_name(column_name);

使用ALTERTABLE語句創(chuàng)建索引,語法為:ALTERTABLEtable_nameADDINDEXindex_name(column_name)。判斷題填空題選擇題操作題(1)創(chuàng)建主鍵時自動創(chuàng)建唯一索引(

)(2)創(chuàng)建視圖時不可以使用SELECT子查詢(

)(3)創(chuàng)建視圖時可以不使用別名(

)(4)視圖的功能是優(yōu)化查詢。(

)(5)索引能夠保證數(shù)據(jù)安全性。(

)√√×

××操作題選擇題填空題判斷題(1)使用MySQL終端創(chuàng)建視圖求工商管理學院的人數(shù)。CREATEVIEWbusiness_management

ASSELECTCOUNT(*)AScountFROMstudentsWHERE學院='工商管理學院';(2)使用MySQL終端創(chuàng)建視圖求工商管理學院同學的分數(shù)。CREATEVIEWbusiness_management_scores

ASSELECT學號,成績FROMgradesWHERE學院='工商管理學院';操作題選擇題填空題判斷題(3)使用MySQL終端創(chuàng)建一個全文索引。ALTERTABLE表名ADDFULLTEXT索引名(列名);(4)使用MySQL終端刪除索引。ALTERTABLE表名DROPINDEX索引名;操作題選擇題填空題判斷題(5)使用MySQLWorkbench圖形化工具創(chuàng)建學生表視圖。1.打開MySQLWorkbench并連接到MySQL服務器。2.在左側(cè)的"管理導航器"中,展開數(shù)據(jù)庫并選擇要創(chuàng)建視圖的數(shù)據(jù)庫。3.在"對象信息"選項卡中,選擇"視圖"選項卡。4.點擊右鍵并選擇"創(chuàng)建視圖"。5.在"創(chuàng)建視圖"對話框中,輸入視圖的名稱。6.在"定義視圖"文本框中,輸入創(chuàng)建視圖的SQL語句。例如:```SELECT*FROMstudents;```7.點擊"應用"按鈕并關閉對話框。視圖將被創(chuàng)建并顯示在"視圖"選項卡下。操作題選擇題填空題判斷題(6)使用Navicat

Premiun

16圖形化工具創(chuàng)建一個普通索引。1.打開NavicatPremium16并連接到MySQL服務器。2.在左側(cè)的"連接器"窗格中,展開數(shù)據(jù)庫并選擇要創(chuàng)建索引的表。3.在右側(cè)的"數(shù)據(jù)庫對象"窗格中,選擇要創(chuàng)建索引的表。4.在"屬性"選項卡中,展開"索引"部分。5.點擊"+"按鈕以添加一個新索引。6.在"索引名稱"字段中輸入索引的名稱。7.在"索引類型"下拉菜單中選擇合適的索引類型(如BTREE或HASH)。8.在"列"列表中選擇要包含在索引中的列。9.點擊"應用"按鈕以創(chuàng)建索引。本講拓展InnoDB的索引模型:在InnoDB中,表都是根據(jù)主鍵順序以索引的形式存放的,這種存儲方式的表稱為索引組織表。InnoDB使用了B+樹索引模型,所以數(shù)據(jù)都是存儲在B+樹中的。每一個索引在InnoDB里面對應一棵B+樹。假設,我們有一個主鍵列為ID的表,表中有字段k,并且在k上有索引。這個表的建表語句是:

mysql>createtableT(

idintprimarykey,

kintnotnull,

namevarchar(16),

index(k))engine=InnoDB;感謝觀看數(shù)據(jù)處理之增刪改第8章通過本課程的學習,您將應該:了解數(shù)據(jù)庫的相關概念熟悉數(shù)據(jù)庫工具的使用熟悉SQL語言的規(guī)則與規(guī)范熟練掌握MySQL數(shù)據(jù)庫管理方法熟練掌握MySQL表結(jié)構(gòu)管理方法熟練掌握表記錄的檢索方法熟練掌握視圖與索引的使用方法熟練掌握數(shù)據(jù)處理之增刪改熟練掌握存儲過程與游標的使用方法熟練掌握存儲函數(shù)的應用熟練掌握觸發(fā)器的應用熟練掌握事務的基本特性和應用場景熟練掌握數(shù)據(jù)庫安全及管理熟練掌握MySQL數(shù)據(jù)庫備份和恢復操作了解利用MySQL+Java開發(fā)一個數(shù)據(jù)庫學習系統(tǒng)并部署課程目標項目部署成功本講教學目標熟練使用INSERT、UPDATE和DELETE語句對數(shù)據(jù)庫的數(shù)據(jù)進行增刪改操作。熟練使用不同的MySQL工具對數(shù)據(jù)表中的數(shù)據(jù)進行增、刪、改操作。通過完成課業(yè)任務學會分析問題、解決問題,提高動手操作能力。通過本講的學習,您將可以:1.OPTION2.OPTIONOPTION3.tb_course表的數(shù)據(jù)修改目錄Content插入數(shù)據(jù)01更新數(shù)據(jù)02刪除數(shù)據(jù)03課業(yè)任務04常見錯誤及解決方案05插入數(shù)據(jù)018.1.1通過INSERT...VALUES語句插入數(shù)據(jù)在建立一個空的數(shù)據(jù)表后,首先需要考慮如何向數(shù)據(jù)表中添加數(shù)據(jù),該操作可以使用INSERT語句來完成。在MySQL中,INSERT語句有3種語法格式,分別是INSERT...VALUES、INSERT...SET和INSERT...SELECT語句。使用INSERT...VALUES語句插入數(shù)據(jù),是INSERT語句最常用的語法格式,格式如下:(1)INTO關鍵字在MySQL中可以省略。(2)如需指定字段輸入,字段1對應插入的值1,字段2對應插入的值2,以此類推。(3)插入值的數(shù)據(jù)類型和對應開的數(shù)據(jù)類型一定要匹配,如果類型不同,將無法插入。說明:INSERT[INTO]數(shù)據(jù)表

[(字段1,字段2...)]VALUES(值1,值2...)

使用INSERT...VALUES語句插入數(shù)據(jù)有兩種情況,第一種情況為表的所有字段均插入數(shù)據(jù),第二種情況為表的指定字段插入數(shù)據(jù)。8.1.1通過INSERT...VALUES語句插入數(shù)據(jù)插入數(shù)據(jù)前執(zhí)行“SHOWDATABASES;”SQL語句查看數(shù)據(jù)庫;執(zhí)行“USEdb_study;”SQL語句使用“db_study”數(shù)據(jù)庫;執(zhí)行“SHOWTABLES;”SQL語句查看數(shù)據(jù)庫中的數(shù)據(jù)表,并執(zhí)行“SELECT*FROMtb_department;”查詢語句查詢表中記錄,此時是tb_department數(shù)據(jù)表插入數(shù)據(jù)前的數(shù)據(jù),執(zhí)行效果如右圖所示。8.1.1通過INSERT...VALUES語句插入數(shù)據(jù)【案例8.1】向系部表中的所有字段插入數(shù)據(jù)。從右圖得知,系部表中有四個字段,利用INSERT...VALUES語句分別插入四個字段的值成為一行新記錄,執(zhí)行的SQL語句如下。INSERTINTOtb_department

VALUES('X09','環(huán)境科學與工程學院','87471239','工程樓’);

或INSERTINTOtb_department

(department_id,department_name,department_phone,department_address)VALUES('X09','環(huán)境科學與工程學院','87471239','工程樓');

8.1.1通過INSERT...VALUES語句插入數(shù)據(jù)執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)添加成功。8.1.1通過INSERT...VALUES語句插入數(shù)據(jù)VALUES字句后面的值需要用引號括起來,原因是對應字段的數(shù)值類型是VARCHAR,如果是INT類型可以省略引號輸入。說明:執(zhí)行上述SQL語句后,重新執(zhí)行“SELECT*FROMtb_department;”SQL語句查詢系部表記錄,查詢結(jié)果如下圖所示,已經(jīng)成功添加了一條記錄。8.1.1通過INSERT...VALUES語句插入數(shù)據(jù)登錄MySQL終端后在db_study數(shù)據(jù)庫中,利用INSERT...VALUES語句分別為字段“department_id”和“department_name”插入值成為一行新記錄,執(zhí)行的SQL語句如下。執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)添加成功。INSERTINTOtb_department(department_id,department_name)VALUES('X10','醫(yī)學院');

【案例8.2】向系部表中指定字段插入數(shù)據(jù)8.1.1通過INSERT...VALUES語句插入數(shù)據(jù)(1)一定需要注意插入數(shù)據(jù)的過程中,對應字段插入對應的值。(2)插入的過程中字段順序不一定需要按照數(shù)據(jù)表所示的字段順序。(3)未被插入數(shù)據(jù)的字段一定是允許為空的,未插入的字段將顯示默認值。說明:執(zhí)行上述SQL語句后,重新執(zhí)行“SELECT*FROMtb_department;”SQL語句,查詢系部表新記錄,查詢結(jié)果如下圖所示,已經(jīng)成功添加了一條新記錄,該記錄只有兩個字段有數(shù)據(jù),另外兩個字段的值為默認值NULL。8.1.2通過INSERT...SET語句插入數(shù)據(jù)在MySQL中除了INSERT...VALUES語句可以對指定字段插入數(shù)據(jù)以外,還能利用INSERT...SET語句往數(shù)據(jù)表中插入數(shù)據(jù),其基本語法格式如下:INSERTINTO數(shù)據(jù)表

SET字段1=值1,字段2=值2......

【案例8.3】向系部表中指定字段插入數(shù)據(jù)。登錄MySQL終端后在db_study數(shù)據(jù)庫中,需要利用INSERT...SET語句分別為字段“department_id”和“department_name”插入值成為一行新記錄,執(zhí)行的SQL語句如下。INSERTINTOtb_department

SETdepartment_id='X10',department_name='醫(yī)學院';

8.1.2通過INSERT...SET語句插入數(shù)據(jù)執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)添加成功。執(zhí)行上述SQL語句后,重新執(zhí)行“SELECT*FROMtb_department;”SQL語句查詢系部表新記錄,查詢結(jié)果如下圖所示,已經(jīng)成功插入一條編號為“X10”,部門名稱為“醫(yī)學院”的新記錄。8.1.2通過INSERT...SET語句插入數(shù)據(jù)【案例8.4】向系部表插入兩行數(shù)據(jù)。登錄MySQL終端后在db_study數(shù)據(jù)庫中,利用INSERT...SET和INSERT...VALUES語句分別向系部表插入兩行新記錄,執(zhí)行的SQL語句如下。INSERTINTOtb_department

SETdepartment_id='X09',department_name='環(huán)境科學與工程學院',department_phone='87471239',department_address='工程樓';INSERTINTOtb_department

SETdepartment_id='X10',department_name='醫(yī)學院',department_phone='87471240',department_address='生物綜合樓';

或者INSERTINTOtb_department

VALUES('X09','環(huán)境科學與工程學院','87471239','工程樓'),('X10','醫(yī)學院','87471240','生物綜合樓');

8.1.2通過INSERT...SET語句插入數(shù)據(jù)執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)添加成功。8.1.2通過INSERT...SET語句插入數(shù)據(jù)執(zhí)行上述SQL語句后,重新執(zhí)行SQL語句“SELECT*FROMtb_department;”查詢系部表新記錄,查詢結(jié)果如下圖所示,已經(jīng)成功插入了兩行記錄。8.1.3通過INSERT...SELECT語句插入查詢結(jié)果在MySQL中,支持將查詢結(jié)果插入指定的數(shù)據(jù)表中,這可以通過INSERT...SELECT語句來實現(xiàn),其語法格式如下:(1)[INTO]數(shù)據(jù)表,用于指定被操作的數(shù)據(jù)表,其中,[INTO]為可選項,可以省略。(2)[(字段1,字段2...)]為可選項,當不指定該選項時,表示要向表中所有列插入數(shù)據(jù),否則表示向數(shù)據(jù)表的指定列插入數(shù)據(jù)。(3)SELECT子句用于快速地從一個或者多個表中獲取數(shù)據(jù),并將這些數(shù)據(jù)作為行數(shù)據(jù)插入目標數(shù)據(jù)表中。需要注意的是,SELECT子句返回的結(jié)果集中的字段數(shù)、字段類型必須與目標數(shù)據(jù)表完全一致。說明:INSERT[INTO]數(shù)據(jù)表

[(字段1,字段2...)]SELECT...

8.1.3通過INSERT...SELECT語句插入查詢結(jié)果登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行SQL語句“SHOWTABLES;”查看數(shù)據(jù)庫中的數(shù)據(jù)表,并執(zhí)行結(jié)構(gòu)查看語句“DESCtb_department;”查看系部表的結(jié)構(gòu),系部表結(jié)構(gòu)如下圖所示?!景咐?.5】將系部表中的所有數(shù)據(jù)插入到測試表中。8.1.3通過INSERT...SELECT語句插入查詢結(jié)果從查詢結(jié)果中得知系部表的字段名稱以及數(shù)據(jù)類型等結(jié)構(gòu),利用SQL語句創(chuàng)建一個與系部表結(jié)構(gòu)相同的新的數(shù)據(jù)表,并將其命名為“tb_test”,執(zhí)行的SQL語句如下。執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)表創(chuàng)建成功。CREATETABLEtb_test

LIKEtb_department;數(shù)據(jù)表創(chuàng)建成功后,重新執(zhí)行“DESCtb_test;”SQL語句查看測試表結(jié)構(gòu),操作結(jié)果如右圖所示,測試表結(jié)構(gòu)與系部表結(jié)構(gòu)相同。8.1.3通過INSERT...SELECT語句插入查詢結(jié)果確認tb_test和tb_department數(shù)據(jù)表結(jié)構(gòu)相同后,利用INSERT...SELECT語句向測試表插入在系部表中的所有記錄,執(zhí)行的SQL語句如下。執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)添加成功。INSERTINTOtb_test

(department_id,department_name,department_phone,department_address)SELECT*FROMtb_department;8.1.3通過INSERT...SELECT語句插入查詢結(jié)果執(zhí)行上述SQL語句后,重新執(zhí)行SQL語句“SELECT*FROMtb_test;”查詢測試表中的記錄,查詢結(jié)果如下圖所示,系部表的數(shù)據(jù)已經(jīng)成功插入到了tb_test數(shù)據(jù)表中。8.1.3通過INSERT...SELECT語句插入查詢結(jié)果由以上案例得知:使用INSERT…VALUES語句可以向表中插入一行數(shù)據(jù),也可以插入多行數(shù)據(jù);使用INSERT…SET語句可以指定插入行中每列的值,也可以指定部分列的值;使用INSERT…SELECT語句可以向表中插入其他表的記錄。

在實際數(shù)據(jù)庫開發(fā)中推薦使用完整的對應字段插入對應值的INSERT...VALUES語句。因為在數(shù)據(jù)庫維護和更新過程中,存在修改字段順序或者修改字段數(shù)值類型的情況,如果是使用按字段順序插入的INSERT語句會對數(shù)據(jù)庫的維護增加難度,約束了數(shù)據(jù)庫的拓展性。在插入多條記錄時,INSERT...VALUES語句的批量插入在運行效率上會遠大于其他語句。更新數(shù)據(jù)028.2更新數(shù)據(jù)在MySQL中使用UPDATE語句可以更新表中的記錄,其語法格式如下:UPDATE[IGNORE]數(shù)據(jù)表SET字段1=值1[,字段2=值2...][WHERE條件表達式][ORDERBY...][LIMIT行數(shù)](1)[IGNORE]在MySQL中,通過UPDATE語句更新表中多行數(shù)據(jù)時,如果出現(xiàn)錯誤,那么整個UPDATE語句操作都會被取消,錯誤發(fā)生前更新的所有行將被恢復到它們原來的值。因此,為了在發(fā)生錯誤時也要繼續(xù)進行更新,可以在UPDATE語句中使用IGNORE關鍵字。(2)SET子句為必選項,用于指定表中要修改的字段名及其字段值。其中的值可以是表達式,也可以是該字段所對應的默認值。如果要指定默認值,可使用關鍵字DEFAULT。(3)WHERE子句為可選項,用于限定表中要修改的行,如果不指定該字句,那么UPDATE語句會更新表中的所有行。(5)ORDERBY子句為可選項,用于限定表中的行被修改的次序。(6)LIMIT子句為可選項,用于限定被修改的行數(shù)。說明:8.2更新數(shù)據(jù)執(zhí)行更新操作前tb_department數(shù)據(jù)表中的數(shù)據(jù)如右圖所示?!景咐?.6】更新系部表中的內(nèi)容。8.2更新數(shù)據(jù)執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)更新成功。UPDATEtb_departmentSETdepartment_name='馬克思主義學院',department_address='思政樓'WHEREdepartment_id='X10';利用UPDATE語句將系部表中的第十行記錄進行修改,執(zhí)行的SQL語句如下。8.2更新數(shù)據(jù)執(zhí)行上述SQL語句后,重新執(zhí)行“SELECT*FROMtb_department;”SQL語句查詢系部表中的記錄,查詢結(jié)果如下圖所示,第十行記錄中字段department_name的值“醫(yī)學院”修改為“馬克思主義學院”。說明:(1)通過WHERE子句指定被更新的記錄所需要滿足的條件,如果忽略WHERE子句,MySQL將更新表中所有的行。(2)更新時一定要保證WHERE子句的正確性,一旦WHERE子句出錯,將會破壞所有改變的數(shù)據(jù)。刪除數(shù)據(jù)038.3.1通過DELETE語句刪除數(shù)據(jù)在數(shù)據(jù)庫中,有些數(shù)據(jù)已經(jīng)失去意義或者發(fā)生錯誤,此時需要將它們刪除。在MySQL中,可以使用DELETE或者TRUNCATETABLE語句刪除表中的一行或者多行數(shù)據(jù)。DELETE[QUICK][IGNORE]FROM數(shù)據(jù)表[WHERE條件表達式][ORDERBY...][LIMIT行數(shù)]通過DELETE語句刪除數(shù)據(jù)的基本語法格式如下。8.3.1通過DELETE語句刪除數(shù)據(jù)說明:(1)[QUICK]為可選項,用于加快部分種類的刪除操作速度。(2)[IGNORE]在MySQL中,通過DELETE語句刪除表中多行數(shù)據(jù)時,如果出現(xiàn)錯誤,那么整個DELETE語句操作都會被取消,錯誤發(fā)生前更新的所有行將被恢復到它們原來的值。因此,為了在發(fā)生錯誤時也要繼續(xù)進行刪除,可以在DELETE語句中使用IGNORE關鍵字。(3)WHERE子句為可選項,用于限定表中要刪除的行,如果不指定該字句,那么DELETE語句會刪除表中的所有行。(5)ORDERBY子句為可選項,用于限定表中的行被刪除的次序。(6)LIMIT子句為可選項,用于限定被刪除的行數(shù)。8.3.1通過DELETE語句刪除數(shù)據(jù)登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行SQL語句“SELECT*FROMtb_department;”查詢執(zhí)行刪除操作前tb_departmen數(shù)據(jù)表的數(shù)據(jù)如下圖所示。【案例8.7】刪除系部表中的一行記錄。8.3.1通過DELETE語句刪除數(shù)據(jù)利用DELETE語句刪除系部表中的第十行記錄,執(zhí)行的SQL語句如下。DELETEFROMtb_departmentWHEREdepartment_id='X10';執(zhí)行上述SQL語句,運行結(jié)果如右圖所示,數(shù)據(jù)刪除成功。8.3.1通過DELETE語句刪除數(shù)據(jù)執(zhí)行上述SQL語句后,重新執(zhí)行“SELECT*FROMtb_department;”SQL語句查詢系部表中的記錄,查詢結(jié)果如圖8.22所示,第十行記錄已經(jīng)刪除成功。在實際應用中,執(zhí)行刪除的條件一般應該為數(shù)據(jù)的id,而不是具體某個字段值,這樣可以避免一些錯誤發(fā)生。說明:8.3.2通過TRUNCATETABLE語句刪除數(shù)據(jù)如果要刪除表中所有行,可以通過TRUNCATETABLE語句實現(xiàn),其基本語法格式如下。TRUNCATE[TABLE]數(shù)據(jù)表名說明:數(shù)據(jù)表名表示刪除的數(shù)據(jù)表名稱,也可以使用“數(shù)據(jù)庫名.數(shù)據(jù)表名”來指定該數(shù)據(jù)表隸屬于哪個數(shù)據(jù)庫。TEXTTEXTTEXT8.3.2通過TRUNCATETABLE語句刪除數(shù)據(jù)登錄MySQL終端后,使用TRUNCATETABLE語句清空系部表數(shù)據(jù),執(zhí)行的SQL語句如下。TRUNCATETABLEdb_study.tb_department;執(zhí)行上述SQL語句后,重新執(zhí)行“USEdb_study;”“SELECT*FROMtb_department;”SQL語句查詢系部表中的記錄,查詢結(jié)果如右圖所示,系部表已經(jīng)沒有任何數(shù)據(jù)。【案例8.8】清空系部表數(shù)據(jù)。執(zhí)行上述SQL語句,運行結(jié)果如下圖所示,數(shù)據(jù)刪除成功。8.3.2通過TRUNCATETABLE語句刪除數(shù)據(jù)(1)使用TRUNCATETABLE語句后,表中的AUTO_INCREMENT計數(shù)器將被重新設置為該列的初始值。(2)對于參與了索引和視圖的表,不能使用TRUNCATETABLE語句來刪除數(shù)據(jù),而應該使用DELETE語句。(3)TRUNCATETABLE操作比DELETE操作使用的系統(tǒng)和事務日志資源少。DELETE語句每刪除一行都會在事務日志中添加一行記錄,而TRUNCATETABLE語句是通過釋放存儲表數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù)的,因此只在事務日志中記錄頁的釋放。DELETE語句和TRUNCATETABLE語句的區(qū)別如下:8.3.3DELETE、TRUNCATE和DROP的區(qū)別1.表和索引所占空間當表被TRUNCATE語句刪除后,該表和索引所占用的空間會恢復到初始大??;DELETE語句操作不會減少表或索引所占用的空間;DROP語句將表所占用的空間全釋放掉。2.應用范圍(1)TRUNCATE只能對數(shù)據(jù)表有效。(2)DELETE可以對數(shù)據(jù)表和視圖有效。3.執(zhí)行速度DROP>TRUNCATE>DELETE。課業(yè)任務048.4課業(yè)任務課業(yè)任務8-1往課程表插入一行記錄課業(yè)任務8-2往課程表同時插入多行記錄課業(yè)任務8-3更新課程表中的字段內(nèi)容課業(yè)任務8-6使用Navicat工具更新課程表中的內(nèi)容課業(yè)任務8-4刪除課程表中插入的多行記錄課業(yè)任務8-5使用Workbench工具刪除課程表中的記錄王小明想利用MySQL+Java開發(fā)一個數(shù)據(jù)庫學習系統(tǒng),在熟悉了MySQL視圖與索引知識后,需要熟悉對數(shù)據(jù)表的數(shù)據(jù)進行增、刪、改操作,并能夠靈活地使用這些操作對數(shù)據(jù)進行管理,現(xiàn)通過6個課業(yè)任務來完成。具體請見實驗7常見錯誤及解決方案058.5.1錯誤8-1向課程表插入一行數(shù)據(jù)失敗8.5.2錯誤8-2TRUNCATE語句清空表格失敗具體請見實驗78.5常見錯誤及解決方案選擇題填空題判斷題操作題(1)下列哪個關鍵字是插入數(shù)據(jù)()A.INSERTB.UPDATEC.DELETED.TRUNCATE(2)下列哪個選項的可選項關鍵字使用正確()。A.INSERTINTOB.UPDATEFROMC.DELETETABLED.DROPRROMAA選擇題填空題判斷題操作題(3)下列哪個選項不是刪除表格數(shù)據(jù)的關鍵字()。A.DROPB.DELETEC.TRUNCATED.以上都不是(4)刪除數(shù)據(jù)操作失敗的原因可能是()。A.外鍵B.數(shù)值類型C.索引D.以上說法都正確AA選擇題填空題判斷題操作題(5)需要一條語句插入多條記錄時我們需要用什么符號隔開()。A.,B.:C.;D.以上都不正確A選擇題填空題判斷題操作題(1)數(shù)據(jù)表的幾大處理方式,分別是()。答案:(1)1.創(chuàng)建(Create):用于創(chuàng)建新的數(shù)據(jù)表。2.查詢(Select):用于檢索數(shù)據(jù)表中的數(shù)據(jù)。3.更新(Update):用于修改數(shù)據(jù)表中的數(shù)據(jù)。4.刪除(Delete):用于刪除數(shù)據(jù)表中的數(shù)據(jù)。5.修改(Alter):用于修改已存在的數(shù)據(jù)表結(jié)構(gòu)。6.截斷(Truncate):用于快速刪除數(shù)據(jù)表中的所有數(shù)據(jù)。7.重建(Rebuild):用于重建數(shù)據(jù)表或其索引以優(yōu)化性能。(2)請寫出查詢的類型,分別是()。(3)根據(jù)查詢的類型寫出對應

溫馨提示

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

評論

0/150

提交評論