版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
單元一
走進數(shù)據(jù)時代單元1走進數(shù)據(jù)時代.pptx單元2創(chuàng)建數(shù)據(jù).pptx單元3查看數(shù)據(jù).pptx單元4約束數(shù)據(jù).pptx單元5語言結(jié)構(gòu).pptx單元6數(shù)據(jù)庫編程.pptx單元7管理數(shù)據(jù)庫.pptx全套可編輯PPT課件任務一
認識數(shù)據(jù)庫案例:銀河商業(yè)集團旗下有多間大型超市,為了統(tǒng)一管理,建設了一個銀河集團數(shù)據(jù)庫管理系統(tǒng)。那么,究竟什么是數(shù)據(jù)庫?什么是數(shù)據(jù)庫管理系統(tǒng)?這個系統(tǒng)又是如何被設計出來?我們要如何使用這個系統(tǒng)?讓我們帶著這些問題,一起開始學習吧!數(shù)據(jù)(Data),是對客觀事物進行抽象描述的結(jié)果。數(shù)據(jù)包括模擬數(shù)據(jù)和數(shù)字數(shù)據(jù)。模擬數(shù)據(jù)是連續(xù)的值,例如音頻、視頻;數(shù)字數(shù)據(jù)是離散的值,例如數(shù)值、符號、文字。1.1.1數(shù)據(jù)數(shù)據(jù)庫(Database,簡稱DB),顧名思義就是數(shù)據(jù)的倉庫。當然這是個先進的、存放有序的倉庫,存放有序指的是有良好的數(shù)據(jù)結(jié)構(gòu),目的是更好的存放、管理這些庫中的數(shù)據(jù)。銀河集團的數(shù)據(jù)庫中就存儲了所有員工的信息數(shù)據(jù)、各種商品的信息數(shù)據(jù)以及每日銷售的信息數(shù)據(jù)。這些數(shù)據(jù)在集團的運營中相關關聯(lián),把它們按照一定的數(shù)據(jù)結(jié)構(gòu)存儲在計算機的存儲介質(zhì)中,就構(gòu)成了一個數(shù)據(jù)庫。1.1.2數(shù)據(jù)庫數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,簡稱DBMS),是一個應用軟件,作用是管理數(shù)據(jù)庫中的各項數(shù)據(jù),也就是對數(shù)據(jù)進行存儲、處理以及保護數(shù)據(jù)的安全。數(shù)據(jù)庫管理員(DatabaseAdministrators,簡稱DBA)通過提供的工具對數(shù)據(jù)庫進行管理。銀河集團的數(shù)據(jù)庫管理系統(tǒng)就是管理它數(shù)據(jù)庫的軟件,通過這個軟件,我們可以對數(shù)據(jù)庫進行增、刪、改、查等操作,也可以保護數(shù)據(jù)庫中數(shù)據(jù)的安全。1.1.3數(shù)據(jù)庫管理系統(tǒng)DBMS應提供如下功能:(1)數(shù)據(jù)定義功能可定義數(shù)據(jù)庫中的數(shù)據(jù)對象。(2)數(shù)據(jù)操縱功能可對數(shù)據(jù)庫表進行基本操作,如插入、刪除、修改、查詢。(3)數(shù)據(jù)的完整性檢查功能保證用戶輸入的數(shù)據(jù)應滿足相應的約束條件。(4)數(shù)據(jù)庫的安全保護功能保證只有賦予權限的用戶才能訪問數(shù)據(jù)庫中的數(shù)據(jù)。(5)數(shù)據(jù)庫的并發(fā)控制功能使多個應用程序可在同一時刻并發(fā)地訪問數(shù)據(jù)庫的數(shù)據(jù)。(6)數(shù)據(jù)庫系統(tǒng)的故障恢復功能使數(shù)據(jù)庫運行出現(xiàn)故障時進行數(shù)據(jù)庫恢復,以保證數(shù)據(jù)庫可靠運行。(7)在網(wǎng)絡環(huán)境下訪問數(shù)據(jù)庫的功能。(8)方便、有效地存取數(shù)據(jù)庫信息的接口和工具。編程人員通過程序開發(fā)工具與數(shù)據(jù)庫的接口編寫數(shù)據(jù)庫應用程序。1.1.3數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫系統(tǒng)(DatabaseSystem,簡稱DBS),是包括了數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)、數(shù)據(jù)庫管理員等的一個綜合系統(tǒng)。我們要能區(qū)分出數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)的區(qū)別,數(shù)據(jù)庫系統(tǒng)中包含了數(shù)據(jù)庫管理系統(tǒng)。1.1.4數(shù)據(jù)庫系統(tǒng)模型(Model),是對現(xiàn)實世界進行的抽象。數(shù)據(jù)模型(DataModel,簡稱DM),是把數(shù)據(jù)的特征抽象成為模型。數(shù)據(jù)模型從抽象層次上描述了系統(tǒng)的靜態(tài)特征、動態(tài)行為和約束條件,為數(shù)據(jù)庫系統(tǒng)的信息表示與操作提供了一個抽象的框架。數(shù)據(jù)模型所描述的內(nèi)容有三部分:數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和數(shù)據(jù)約束。數(shù)據(jù)庫管理系統(tǒng)根據(jù)數(shù)據(jù)模型對數(shù)據(jù)進行存儲和管理,數(shù)據(jù)庫管理系統(tǒng)采用的數(shù)據(jù)模型主要有層次模型、網(wǎng)狀模型和關系模型。1.1.5數(shù)據(jù)模型1.層次模型層次模型的組織結(jié)構(gòu)為樹形,由根節(jié)點和子節(jié)點組成,這樣就構(gòu)成了一棵根在上,枝在下的樹。1.1.5數(shù)據(jù)模型銀河集團金星超市木星超市火星超市生鮮組熟食組紙品組……2.網(wǎng)狀模型網(wǎng)狀模型的組織結(jié)構(gòu)為網(wǎng)絡狀,每個節(jié)點與其他節(jié)點都有聯(lián)系,這樣就構(gòu)成了一個復雜的網(wǎng)絡。1.1.5數(shù)據(jù)模型員工A員工B員工C員工D商品A商品B商品C商品D商品E3.關系模型關系模型的組織結(jié)構(gòu)是表格(二維表),以行、列的形式構(gòu)成。我們把表格中的一行稱為一條記錄,一列稱為一個字段,每一列的標題名稱為字段名。這樣構(gòu)成的結(jié)構(gòu)表示為:表名(字段名1,…,字段名n)。1.1.5數(shù)據(jù)模型員工姓名員工入職日期員工聯(lián)系電話員工家庭住址員工工資獎金0010001張子婷2018-5-1813303161111新華路3號470018000010002李偉澤2018-5-1813303161213文明路25號450011000020001王文諾2019-5-113303162112文華路23號45009000030002趙天成2019-12-113303163210詹天路5號4400550……
附錄A的表A.2、表A.4和表A.6描述了銀河集團數(shù)據(jù)管理系統(tǒng)中員工、銷售和庫存三個信息表的完整數(shù)據(jù)。對于關系表,假如有組合一個或幾個字段的值,可以對其對應的記錄起到唯一標志的作用,那么我們稱這個字段或是這幾個字段的組合為碼。有的時候,對于一個表可能會出現(xiàn)多個碼?!爸鞔a”作為最重要的碼,一個關系表一般可以指定一個“主碼”。在關系模式中,標出方式為在主碼下劃出橫線。上述三個表的關系模式可以分別表示為:員工信息表(員工編號,員工姓名,員工入職日期,員工聯(lián)系電話,員工家庭住址,員工工資,獎金)銷售信息表(銷售編號,銷售日期,銷售員工編號,商品編號,銷售數(shù)量)庫存信息表(商品編號,商品類型,商品名稱,商品進價,商品售價,庫存數(shù)量)1.1.5數(shù)據(jù)模型從上述表述可以看出,數(shù)據(jù)根據(jù)關系模型進行表達更加簡潔、直觀,并且對于后續(xù)進行插入、刪除、修改等操作會更加的方便。如果數(shù)據(jù)根據(jù)層次模型或是網(wǎng)狀模型進行表達則組織的方式將會更為復雜,插入、刪除、修改等操作也會更加的繁瑣。所以,數(shù)據(jù)庫管理系統(tǒng)基本上都應用了關系模型,我們將要學習的MySQL也是支持關系數(shù)據(jù)模型的數(shù)據(jù)庫管理系統(tǒng)。1.1.5數(shù)據(jù)模型任務二
設計關系型數(shù)據(jù)庫實體、實體集、屬性和屬性值。通常,把每一類數(shù)據(jù)對象的個體稱為“實體”,而每一類對象個體的集合稱為“實體集”。與每個實體集有關的信息項稱為屬性。實體集中的實體彼此是可區(qū)別的,如果實體集中的屬性或最小屬性組合的值能唯一標志其對應實體,則將該屬性或?qū)傩越M合稱為碼。對于每一個實體集,可指定一個碼為主碼。1.2.1概念結(jié)構(gòu)設計用圖形來表達這些概念:用矩形框表示實體集;用橢圓或帶半圓的矩形框表示屬性;用線段連接實體集與屬性;當一個屬性或?qū)傩越M合指定為主碼時,在實體集與屬性的連接線上標記上斜線;這樣我們就得到了實體集之間的各種關系,我們把這些關系稱為“聯(lián)系”,聯(lián)系用菱形表示,通過直線與實體相連。這種實體集和實體集之間聯(lián)系的圖叫做實體——聯(lián)系(Entity-Relationship)圖,簡稱E-R圖。1.2.1概念結(jié)構(gòu)設計總的來說,對于兩個實體集A和B之間的聯(lián)系分為三種情況:1.一對一的聯(lián)系(1:1)A中的一個實體最多與B中的一個實體相聯(lián)系,B中的一個實體也最多與A中的一個實體相聯(lián)系。例如,“超市”與“店長”這兩個實體集之間的聯(lián)系是一對一的聯(lián)系,因為一間超市只有一位店長,反過來,一位店長只屬于一間超市。如圖1.5所示,是“超市”與“店長”這兩個實體集的E-R模型。1.2.1概念結(jié)構(gòu)設計2.一對多的聯(lián)系(1:n)A中的一個實體可以與B中的多個實體相聯(lián)系,而B中的一個實體至多與A中的一個實體相聯(lián)系。例如,“超市”與“員工”這兩個實體集之間的聯(lián)系是一對多的聯(lián)系,因為,一間超市可以雇傭多名員工,反過來,一名員工卻只能在一間超市工作。如圖1.6所示,是“超市”與“員工”這兩個實體集的E-R模型。1.2.1概念結(jié)構(gòu)設計3.多對多的聯(lián)系(m:n)A中的一個實體可以與B中的多個實體相聯(lián)系,而B中的一個實體也可與A中的多個實體相聯(lián)系。例如,“員工”與“商品”這兩個實體集之間的聯(lián)系是多對多的聯(lián)系,因為,一名員工可以銷售多種商品,那么同樣的,一種商品也可以被多名員工進行銷售。如圖1.7所示,是“員工”與“商品”這兩個實體集的E-R模型。1.2.1概念結(jié)構(gòu)設計1.一對一聯(lián)系(1∶1)的E-R圖到關系模式的轉(zhuǎn)換對于一對一的聯(lián)系(1∶1)可以單獨對應一個關系模式,也可以不單獨對應一個關系模式。(1)聯(lián)系單獨對應一個關系模式,則由聯(lián)系屬性、參與聯(lián)系的各實體集的主碼屬性構(gòu)成關系模式,其主碼可選參與聯(lián)系的實體集的任一方的主碼。例如,對于圖1-5所描述的“超市(supermarket)”實體集與“店長(manager)”實體集,它們通過屬于(belong)聯(lián)系的E-R模型可以設計為下面的關系模式(下橫線表示該字段為主碼):supermarket(編號,店名)manager(編號,姓名)belong(s編號,m編號)。1.2.2邏輯結(jié)構(gòu)設計(2)聯(lián)系不單獨對應一個關系模式,則由一方實體集的主碼加入到另一方實體集的屬性中,然后共同構(gòu)成關系模式。例如,對于圖1-5所描述的“超市(supermarket)”實體集與“店長(manager)”實體集,它們通過屬于(belong)聯(lián)系的E-R模型可以設計為下面的關系模式(下橫線表示該字段為主碼):supermarket(編號,店名,m編號)manager(編號,姓名)或者supermarket(編號,店名)manager(編號,姓名,s編號)1.2.2邏輯結(jié)構(gòu)設計2.一對多聯(lián)系(1∶n)的E-R圖到關系模式的轉(zhuǎn)換對于一對多聯(lián)系(1∶n)可以單獨對應一個關系模式,也可以不單獨對應一個關系模式。(1)聯(lián)系單獨對應一個關系模式,則由聯(lián)系的屬性、參與聯(lián)系的各實體集的主碼屬性構(gòu)成關系模式,n端的主碼作為該關系模式的主碼。例如,對于圖1-6所描述的“超市(supermarket)”實體集與“員工(employees)”實體集,它們通過屬于(belong)聯(lián)系的E-R模型可以設計為下面的關系模式(下橫線表示該字段為主碼):supermarket(編號,店名)employees(編號,姓名)belong(s編號,e編號)1.2.2邏輯結(jié)構(gòu)設計(2)聯(lián)系不單獨對應一個關系模式,則由聯(lián)系的屬性及1端的主碼加入n端實體集對應的關系模式中,主碼仍為n端的主碼。例如,對于圖1-6所描述的“超市(supermarket)”實體集與“員工(employees)”實體集,它們通過屬于(belong)聯(lián)系的E-R模型可以設計為下面的關系模式(下橫線表示該字段為主碼):supermarket(編號,店名)employees(編號,姓名,s編號)1.2.2邏輯結(jié)構(gòu)設計3.多對多聯(lián)系(m:n)的E-R圖到關系模式的轉(zhuǎn)換對于多對多聯(lián)系(m∶n),單獨對應一個關系模式。該關系模式包括聯(lián)系的屬性、參與聯(lián)系的各實體集的主碼屬性,該關系模式的主碼由各實體集的主碼屬性共同組成。例如,對于圖1-7所描述的“員工(employees)”實體集與“商品(goods)”實體集,它們通過銷售(sale)聯(lián)系的E-R模型可以設計為下面的關系模式(下橫線表示該字段為主碼):employees(編號,姓名)goods(編號,名稱)sale(e編號,g編號)在一個關系模式只能有一個主碼。以上關系模式sale的主碼,是一個主碼,它是由員工的“編號”和商品的“編號”兩個屬性組合起來,共同構(gòu)成的。1.2.2邏輯結(jié)構(gòu)設計邏輯結(jié)構(gòu)設計就是上述依靠E-R圖來設計關系模式的設計過程。邏輯結(jié)構(gòu)設計的目的是為了設計項目中各實體集的關系模式,我們只有完成了邏輯結(jié)構(gòu)設計,才可以在數(shù)據(jù)庫管理系統(tǒng)的環(huán)境下(例如MySQL軟件),進行創(chuàng)建數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)表,創(chuàng)建其他數(shù)據(jù)庫對象,對數(shù)據(jù)進行增、刪、改、查及其他管理操作。1.2.2邏輯結(jié)構(gòu)設計數(shù)據(jù)的物理模型即指數(shù)據(jù)的存儲結(jié)構(gòu),如對數(shù)據(jù)庫物理文件和索引文件的組織方式、文件的存取路徑、內(nèi)存的管理等。物理模型不僅與數(shù)據(jù)庫管理系統(tǒng)(DBMS)有關,還和操作系統(tǒng)(OS)甚至硬件有關,物理模型對用戶是不可見的。數(shù)據(jù)庫的物理結(jié)構(gòu)設計是對已經(jīng)確定的邏輯數(shù)據(jù)結(jié)構(gòu),利用DBMS所提供的方法、技術,以較優(yōu)的數(shù)據(jù)存儲結(jié)構(gòu)、數(shù)據(jù)存取路徑、合理的數(shù)據(jù)存放位置以及存儲分配,設計出一個高效的、可以實現(xiàn)的物理數(shù)據(jù)結(jié)構(gòu)。簡單的說,就是針對已經(jīng)完成的邏輯結(jié)構(gòu)設計,再進一步設計出與其相應的并且較為優(yōu)化的物理結(jié)構(gòu),設計出的物理結(jié)構(gòu)包括實現(xiàn)數(shù)據(jù)存儲、數(shù)據(jù)存取路徑、數(shù)據(jù)存放位置、存儲分配等。1.2.3物理結(jié)構(gòu)設計任務三
安裝MySQL數(shù)據(jù)庫
及可視化界面工具MySQL是一個關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQLAB公司開發(fā),屬于Oracle旗下產(chǎn)品。MySQL是最流行的關系型數(shù)據(jù)庫管理系統(tǒng)之一,在WEB應用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,關系數(shù)據(jù)庫管理系統(tǒng))應用軟件之一。MySQL是一種關系型數(shù)據(jù)庫管理系統(tǒng),關系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。MySQL所使用的SQL語言是用于訪問數(shù)據(jù)庫的最常用標準化語言。MySQL軟件采用了雙授權政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,因此一般的中小型網(wǎng)站開發(fā)在網(wǎng)站數(shù)據(jù)庫方面都選擇MySQL。1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL1.下載MySQL8.0.192020年1月,MySQL發(fā)布了本年度的第一個小版本MySQL8.0.19。同其他版本一樣,下載的地址依然為:/downloads/mysql/。1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL以MicrosoftWindows操作系統(tǒng)為例,安裝版下載后是mysql-installer-community-.msi,壓縮版下載后是mysql-8.0.19-winx64.zip,分別需要進行安裝以及解壓縮、配置環(huán)境。1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL2.安裝MySQL8.0.19(1)mysql-installer-community-.msi的安裝1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL2.安裝MySQL8.0.19(1)mysql-installer-community-.msi的安裝1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL2.安裝MySQL8.0.19(2)mysql-8.0.19-winx64.zip的安裝對mysql-8.0.19-winx64.zip文件進行解壓縮,解壓到當前文件夾。1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL2.安裝MySQL8.0.19(2)mysql-8.0.19-winx64.zip的安裝在mysql-8.0.19-winx64的目錄下,配置MySQL配置文件,新建my.ini編輯如下配置信息(注意:my.ini需要以ANSI格式編碼)。1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL2.安裝MySQL8.0.19(2)mysql-8.0.19-winx64.zip的安裝以管理員的身份打開cmd,切換目錄D:\mysql\mysql-8.0.19-winx64\bin的bin目錄下,即在“命令提示符”界面中輸入:cdD:\mysql\mysql-8.0.19-winx64\bin。然后,使用命令行初始化數(shù)據(jù)庫,即在“命令提示符”界面中輸入:mysqld--initialize–console,初始化完成后會得到,root用戶初始密碼。1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQL3.運行和退出MySQL8.0.19安裝完畢后,點擊“開始”菜單,找到MySQL下的MySQL8.0CommandLineClient,點擊進入,在首行“Enterpassword:”后面輸入設置好的MySQL登錄密碼,即可登入。輸入:exit,即可退出。1.3.1關系型數(shù)據(jù)庫管理系統(tǒng)MySQLMySQLWorkbench是一款專為MySQL設計的ER/數(shù)據(jù)庫建模工具,是MySQLAB發(fā)布的可視化的數(shù)據(jù)庫設計軟件,它的前身是FabForce公司的DBDesigner4。MySQLWorkbench為數(shù)據(jù)庫管理員、程序開發(fā)者和系統(tǒng)規(guī)劃師提供可視化設計、模型建立、以及數(shù)據(jù)庫管理功能。它包含了用于創(chuàng)建復雜的數(shù)據(jù)建模ER模型,正向和逆向數(shù)據(jù)庫工程,也可以用于執(zhí)行通常需要花費大量時間和需要的難以變更和管理的文檔任務。使用者可以利用MySQLWorkbench設計和創(chuàng)建新的數(shù)據(jù)庫圖示,建立數(shù)據(jù)庫文檔,以及進行復雜的MySQL遷移。MySQLWorkbench同時具有開源和商業(yè)化的兩個版本,可在Windows、Linux和MacOS等操作系統(tǒng)上使用。最新的版本是2020年發(fā)布的MySQLWorkbench8.0.19。1.3.2可視化界面工具MySQLWorkbench8.0.19MySQLWorkbench可在MySQL的官方網(wǎng)站進行下載,具體網(wǎng)址是:/downloads/workbench/,同MySQL的下載頁面相類似,可以選擇不同的操作系統(tǒng),選擇32位或64位的安裝版。MySQLWorkbench8.0.19的安裝非常簡單,按照提示即可完成安裝,是MySQLWorkbench軟件運行的界面截圖。在此界面上點擊左下方“MySQLConnections”右側(cè)的“+”號,即彈出對話框。在此對話框中,可以設置數(shù)據(jù)庫連接,包括設置連接的名稱、連接的方式、主機號、端口號、賬號和密碼等。按照之前安裝MySQL8.0.19時設置的各項內(nèi)容進行填寫,最后點擊“TestConnection”。即可完成數(shù)據(jù)庫連接,看到MySQL8.0.19自帶的數(shù)據(jù)庫。1.3.2可視化界面工具MySQLWorkbench8.0.191.3.2可視化界面工具MySQLWorkbench8.0.19MySQLWorkbench8.0.19軟件的操作頁面,可以劃分為五個區(qū)域,分別是:數(shù)據(jù)庫及其各對象的顯示區(qū)域、選擇對象的相關信息區(qū)域、SQL命令編輯區(qū)域、SQL命令運行結(jié)果顯示區(qū)域和命令執(zhí)行區(qū)域。1.3.2可視化界面工具MySQLWorkbench8.0.19在SQL命令編輯區(qū)中輸入測試語句,“usesys;”(使用sys數(shù)據(jù)庫)以及“select*fromsys_config;”(查詢sys_config表中的所有數(shù)據(jù)),如圖1.20所示,其中sys數(shù)據(jù)庫是mysql自帶的系統(tǒng)數(shù)據(jù)庫,然后選擇執(zhí)行(或者使用快捷鍵Ctrl+Enter)。執(zhí)行成功后,查詢結(jié)果會以列表的形式顯示在下面的運行結(jié)果區(qū)域中。使用完畢后,可以直接退出。假如沒有后續(xù)的數(shù)據(jù)庫操作,可以關閉MySQL的服務。1.3.2可視化界面工具MySQLWorkbench8.0.19NavicatforMySQL是一套管理和開發(fā)MySQL或MariaDB的理想解決方案,支持單一程序,可同時連接到MySQL和MariaDB。這個功能齊備的前端軟件為數(shù)據(jù)庫管理、開發(fā)和維護提供了直觀而強大的圖形界面,給MySQL或MariaDB新手以及專業(yè)人士提供了一組全面的工具。NavicatforMySQL可連接到任何本機或遠程MySQL和MariaDB服務器。它可以用于MySQL數(shù)據(jù)庫服務器版本3.21或以上和MariaDB5.1或以上,與Drizzle、OurDelta和PerconaServer兼容,并支持大部分最新功能,包括表、視圖、函數(shù)或過程、事件等。NavicatforMySQL15.0.13主要功能包括SQL創(chuàng)建工具或編輯器、數(shù)據(jù)模型工具、數(shù)據(jù)傳輸、導入或?qū)С?、?shù)據(jù)或結(jié)構(gòu)同步、報表等。NavicatforMySQL15.0.13可在Navicat的官方網(wǎng)站進行下載,具體網(wǎng)址是:/download/navicat-for-mysql,可以選擇14天免費全功能的試用版先行試用。NavicatforMySQL15.0.13同樣支持Windows、MacOS和Linux這些不同的操作系統(tǒng),可以選擇32位或64位的安裝版。1.3.3可視化界面工具NavicatforMySQL15.0.13NavicatforMySQL的安裝非常簡單,按照提示即可完成安裝。1.3.3可視化界面工具NavicatforMySQL15.0.131.3.3可視化界面工具NavicatforMySQL15.0.13MySQL數(shù)據(jù)庫的圖形化界面工具軟件有很多,其中MySQLWorkbench8.0.19和NavicatforMySQL15.0.13是使用者較多的兩款。綜合比較MySQLWorkbench8.0.19和NavicatforMySQL15.0.13,使用操作都很方便,NavicatforMySQL15.0.13有中文版,對初學者來說感覺更舒適和方便,但其只提供14天的免費使用,長期使用需要付費購買。MySQLWorkbench8.0.19在MySQL的官方網(wǎng)站上即可進行下載,可與MySQL8.0.19的下載一起完成,而且可以長期免費使用。在本教材中,我們將使用MySQLWorkbench8.0.19作為主要的數(shù)據(jù)庫編輯工具。1.3.3可視化界面工具NavicatforMySQL15.0.13單元二
創(chuàng)建數(shù)據(jù)任務一
操作數(shù)據(jù)庫MySQL安裝后,系統(tǒng)自動地創(chuàng)建information_scema和mysql數(shù)據(jù)庫,MySQL把有關數(shù)據(jù)庫的信息存儲在這兩個數(shù)據(jù)庫中。如果刪除了這些數(shù)據(jù)庫,MySQL就不能正常工作。對于用戶的數(shù)據(jù),需要創(chuàng)建新的數(shù)據(jù)庫來存放。使用CREATEDATABASE或CREATESCHEMA命令可以創(chuàng)建數(shù)據(jù)庫。語法格式:CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]db_name[create_specification[,create_specification]...]其中create_specification:[DEFAULT]CHARACTERSETcharset_name|[DEFAULT]COLLATEcollation_name2.1.1創(chuàng)建數(shù)據(jù)庫【例2.1】創(chuàng)建一個名為yhdb的數(shù)據(jù)庫。createdatabaseyhdb;注意:(1)在MySQL中,每一條SQL語句都以“;”作為結(jié)束標志。(2)由于MySQL中不允許出現(xiàn)兩個數(shù)據(jù)庫命名相同的情況,所以如果再創(chuàng)建一個數(shù)據(jù)庫也命名為yhdb,將提示錯誤。如果不知道是否有重名的數(shù)據(jù)庫,可以在創(chuàng)建數(shù)據(jù)庫時使用IFNOTEXISTS從句,即為:createdatabaseifnotexistsyhdb;意為:如果不存在yhdb數(shù)據(jù)庫就創(chuàng)建它,這樣不論是否有重名的數(shù)據(jù)庫,均可以不顯示錯誤信息。2.1.1創(chuàng)建數(shù)據(jù)庫創(chuàng)建了數(shù)據(jù)庫之后使用USE命令可指定當前數(shù)據(jù)庫。語法格式:USEdb_name;【例2.2】使用yhdb數(shù)據(jù)庫。useyhdb;說明:這個語句也可以用來從一個數(shù)據(jù)庫“跳轉(zhuǎn)”到另一個數(shù)據(jù)庫,在用CREATEDATABASE語句創(chuàng)建了數(shù)據(jù)庫之后,該數(shù)據(jù)庫不會自動成為當前數(shù)據(jù)庫,需要用這條USE語句來指定。2.1.2使用數(shù)據(jù)庫數(shù)據(jù)庫創(chuàng)建后,如果需要修改數(shù)據(jù)庫的參數(shù),可以使用ALTERDATABASE命令。語法格式:ALTER{DATABASE|SCHEMA}[db_name]alter_specification[,alter_specification]...其中alter_specification:[DEFAULT]CHARACTERSETcharset_name|[DEFAULT]COLLATEcollation_name2.1.3修改數(shù)據(jù)庫【例2.3】修改數(shù)據(jù)庫yhdb的默認字符集和校對規(guī)則。alterdatabaseyhdbdefaultcharactersetgb2312defaultcollategb2312_chinese_ci;說明:ALTERDATABASE用于更改數(shù)據(jù)庫的全局特性,這些特性儲存在數(shù)據(jù)庫目錄中的db.opt文件中。用戶必須有對數(shù)據(jù)庫進行修改的權限,才可以使用ALTERDATABASE。修改數(shù)據(jù)庫的選項與創(chuàng)建數(shù)據(jù)庫相同,功能不再重復說明。如果語句中數(shù)據(jù)庫名稱忽略,則修改當前(默認)數(shù)據(jù)庫。2.1.3修改數(shù)據(jù)庫已經(jīng)創(chuàng)建的數(shù)據(jù)庫需要刪除,使用DROPDATABASE命令。語法格式:DROPDATABASE[IFEXISTS]db_name【例2.4】刪除數(shù)據(jù)庫yhdb。dropdatabaseyhdb;注意:如果刪除的數(shù)據(jù)庫不存在,比如完成例2.4后,再次刪除數(shù)據(jù)庫yhdb,將會提示錯誤。為了避免這種錯誤,與創(chuàng)建數(shù)據(jù)庫相同,可以在刪除數(shù)據(jù)庫時使用IFEXISTS從句,即為:dropdatabaseifexistsyhdb;意為:如果存在yhdb數(shù)據(jù)庫就刪除它,這樣不論這個數(shù)據(jù)庫是否存在,均可以不顯示錯誤信息。注意:這個命令必須小心使用,因為它將刪除指定的整個數(shù)據(jù)庫,該數(shù)據(jù)庫的所有表(包括其中的數(shù)據(jù))也將永久刪除。2.1.4刪除數(shù)據(jù)庫任務二
操作數(shù)據(jù)表1.數(shù)值類型MySQL支持所有標準SQL數(shù)值數(shù)據(jù)類型。嚴格數(shù)值數(shù)據(jù)類型:INTEGER或INT,SMALLINT,DECIMAL或DEC,NUMERIC近似數(shù)值數(shù)據(jù)類型:FLOAT,REAL,PRECISIONMySQL支持選擇在該類型關鍵字后面的括號內(nèi)指定整數(shù)值的顯示寬度(例如,INT(4))。對于浮點列類型,在MySQL中單精度值使用4個字節(jié),雙精度值使用8個字節(jié)。MySQL允許使用FLOAT(M,D)或REAL(M,D)或DOUBLEPRECISION(M,D)格式?!?M,D)”表示該值一共顯示M位整數(shù),其中D位位于小數(shù)點后面。例如,定義為FLOAT(7,4)的一個列可以顯示為-999.9999。MySQL保存值時進行四舍五入,因此如果在FLOAT(7,4)列內(nèi)插入999.00009,近似結(jié)果是999.0001。2.2.1數(shù)據(jù)類型2.字符串類型:字符串類型的數(shù)據(jù)主要是由字母、漢字、數(shù)字符號、特殊符號構(gòu)成的數(shù)據(jù)對象。按照字符個數(shù)多少的不同分為以下幾類:(1)CHAR:列的長度固定為創(chuàng)建表時聲明的長度。長度可以為從0到255的任何值。當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。例如,在員工信息表中,如果設定“員工姓名char(8)”,表示“員工姓名”是8個字符長度的字符串,可以做賦值引用即:員工姓名=`高田`,這里員工姓名的值包括8個字符,其中2個漢字(按照4個字符處理)和4個空格。name右側(cè)會有若干個空格占位。這樣浪費了磁盤的存儲空間。2.2.1數(shù)據(jù)類型(2)VARCHAR:列中的值為可變長字符串。長度可以指定為0到65,535之間的值。(VARCHAR的最大有效長度由最大行大小和使用的字符集確定。整體最大長度是65,532字節(jié))。同CHAR對比,VARCHAR值保存時只保存需要的字符數(shù)。(3)BLOB:二進制字符串(字節(jié)字符串)。BLOB列沒有字符集,并且排序和比較基于列值字節(jié)的數(shù)值值。這種類型數(shù)據(jù)用于存儲聲音、視頻、圖像等數(shù)據(jù)。(4)TEXT:非二進制字符串(字符字符串)。TEXT列有一個字符集,并且根據(jù)字符集的校對規(guī)則對值進行排序和比較。在實際應用中像個人履歷、獎懲情況、職業(yè)說明、內(nèi)容簡介等設定為text的數(shù)據(jù)類型。BLOB和TEXT列不能有默認值。BLOB或TEXT對象的最大大小由其類型確定,但在客戶端和服務器之間實際可以傳遞的最大值由可用內(nèi)存數(shù)量和通信緩存區(qū)大小確定。你可以通過更改max_allowed_packet變量的值更改消息緩存區(qū)的大小,但必須同時修改服務器和客戶端程序。2.2.1數(shù)據(jù)類型3.日期和時間類型(1)date:表示日期,輸入數(shù)據(jù)的格式是:yyyy-mm-dd。支持的范圍是'1000-01-01'到'9999-12-31'。例如,在員工信息表中的員工入職日期可以設定成為date類型。(2)time:表示時間,輸入數(shù)據(jù)的格式是:hh:mm:ss。TIME值的范圍可以從'-838:59:59'到'838:59:59'。小時部分會因此大的原因是TIME類型不僅可以用于表示一天的時間(必須小于24小時),還可能為某個事件過去的時間或兩個事件之間的時間間隔(可以大于24小時,或者甚至為負)。(3)datetime:表示日期時間,格式是:yyyy-mm-ddhh:mm:ss。支持的范圍為'1000-01-0100:00:00'到'9999-12-3123:59:59'。2.2.1數(shù)據(jù)類型創(chuàng)建表使用CREATETABLE命令。語法格式:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name[([column_definition],...|[index_definition])][table_option][select_statement];2.2.2創(chuàng)建數(shù)據(jù)表【例2.5】創(chuàng)建數(shù)據(jù)庫yhdb,并在該數(shù)據(jù)庫中創(chuàng)建員工信息表employees。2.2.2創(chuàng)建數(shù)據(jù)表createdatabaseyhdb;useyhdb;CREATETABLEemployees(員工編號CHAR(7)NOTNULLPRIMARYKEY,員工姓名CHAR(8)NOTNULL,員工性別TINYINTNOTNULL,入職日期DATENOTNULL,聯(lián)系電話CHAR(11)NOTNULL,家庭住址CHAR(20),工資收入FLOAT(6,2),獎金收入FLOAT(6,2))ENGINE=INNODB;2.2.2創(chuàng)建數(shù)據(jù)表“NOTNULL”表示對應的字段如“員工姓名”不允許有空值??罩?NULL)通常表示未知、不可用或?qū)⒃谝院筇砑拥臄?shù)據(jù)。若一個列允許為空值,則向表中輸入記錄值時可不為該列給出具體值;而一個列若不允許為空值,則在輸入時必須給出該列的具體值??罩挡荒芘c數(shù)值數(shù)據(jù)0或字符類型的空字符混為一談。任意兩個空值都不相等?!癙RIMARYKEY”表示將“員工編號”字段定義為主鍵。主鍵表示該字段的值不能為空值并且不能出現(xiàn)重復值,即非空且唯一。“ENGINE=InnoDB”表示采用的存儲引擎是InnoDB,InnoDB是MySQL在Windows平臺默認的存儲引擎,所以“ENGINE=InnoDB”可以省略?!纠?.6】在數(shù)據(jù)庫yhdb中創(chuàng)建銷售信息表sales。2.2.2創(chuàng)建數(shù)據(jù)表CREATETABLEsales(銷售編號CHAR(7)NOTNULL,銷售日期DATENOTNULL,員工編號CHAR(7)NOTNULL,商品編號CHAR(4)NOTNULL,銷售數(shù)量TINYINTNOTNULL,PRIMARYKEY(銷售編號,銷售日期,員工編號,商品編號));注意:對于一個數(shù)據(jù)表來說,“PRIMARYKEY”只能出現(xiàn)一次,但有4個字段(銷售編號、銷售日期、員工編號、商品編號)的說明中寫了“主鍵”,這表明這4個字段共同構(gòu)成了聯(lián)合主鍵,在SQL命令行中需要在各字段后以“PRIMARYKEY(銷售編號,銷售日期,員工編號,商品編號)”的形式聲明,表明這4個字段的組合值不能為空值并且不能出現(xiàn)重復值,也就是說這4個字段的值在一條記錄中最多有3個是一致的。2.2.2創(chuàng)建數(shù)據(jù)表【例2.7】在數(shù)據(jù)庫yhdb中創(chuàng)建庫存信息表stocks。2.2.2創(chuàng)建數(shù)據(jù)表CREATETABLEstocks(商品編號CHAR(4)NOTNULL,類型編號CHAR(6)NOTNULL,商品名稱CHAR(50)NOTNULL,商品進價FLOAT(5,2)NOTNULL,商品售價FLOAT(5,2),庫存數(shù)量INTNOTNULL,PRIMARYKEY(商品編號,類型編號));。2.2.2創(chuàng)建數(shù)據(jù)表ALTERTABLE用于更改原有表的結(jié)構(gòu)。例如,可以增加或刪減列,創(chuàng)建或取消索引,更改原有列的類型,重新命名列或表,還可以更改表的評注和表的類型。語法格式:ALTER[IGNORE]TABLEtbl_namealter_specification[,alter_specification]...2.2.3修改數(shù)據(jù)表【例2.8】在數(shù)據(jù)庫yhdb中的employees表中增加“備注”列(text類型)。altertableemployeesaddcolumn備注text;【例2.9】在數(shù)據(jù)庫yhdb中的employees表中刪除“備注”列。altertableemployeesdrop備注;注意:增加字段時要注明字段類型,刪除字段時只需注明字段名稱。2.2.3修改數(shù)據(jù)表除了上面的ALTERTABLE命令,還可以直接用RENAMETABLE語句來更改表的名字。語法格式:RENAMETABLEtbl_nameTOnew_tbl_name[,tbl_name2TOnew_tbl_name2]...【例2.10】將數(shù)據(jù)庫yhdb中的employees表重命名為員工信息表,將sales表重命名為銷售信息表。renametableemployeesto員工信息表,salesto銷售信息表;2.2.4修改數(shù)據(jù)表名語法格式:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name[()LIKEold_tbl_name[]]|[AS(select_statement)] ;【例2.11】將數(shù)據(jù)庫yhdb中的員工信息表拷貝,創(chuàng)建一個名為employees的數(shù)據(jù)表,將銷售信息表拷貝,創(chuàng)建一個名為sales的數(shù)據(jù)表。createtableemployeeslike員工信息表;【例2.12】創(chuàng)建數(shù)據(jù)表銷售信息表的一個名為sales的拷貝,并且復制其內(nèi)容。createtablesalesas(select*from銷售信息表);2.2.5復制數(shù)據(jù)表需要刪除一個表時可以使用DROPTABLE語句。語法格式:DROP[TEMPORARY]TABLE[IFEXISTS]tbl_name[,tbl_name]...【例2.13】刪除表員工信息表。droptable員工信息表;【例2.14】刪除表銷售信息表。droptableifexists銷售信息表;注意:為防止要刪除的數(shù)據(jù)表不存在,出現(xiàn)提示錯誤,與創(chuàng)建數(shù)據(jù)庫相同,可以在刪除數(shù)據(jù)表時使用IFEXISTS從句。意為:如果存在這個數(shù)據(jù)表就刪除它,這樣不論這個數(shù)據(jù)表是否存在,均可以不顯示錯誤信息。注意:這個命令必須小心使用,因為它將刪除指定的整個數(shù)據(jù)表(包括其中的數(shù)據(jù))。2.2.6刪除數(shù)據(jù)表任務三
數(shù)據(jù)表記錄操作通過INSERT或REPLACE語句完成向數(shù)據(jù)表中插入一行或多行數(shù)據(jù)的操作。語法格式:INSERT[LOW_PRIORITY|DELAYED|HIGH_PRIORITY][IGNORE][INTO]tbl_name[(col_name,...)]VALUES({expr|DEFAULT},...),(...),...|SETcol_name={expr|DEFAULT},...[ONDUPLICATEKEYUPDATEcol_name=expr,...]2.3.1插入表數(shù)據(jù)從INSERT的語法格式可以看到,使用INSERT語句可以向表中插入一行數(shù)據(jù),也可以插入多行數(shù)據(jù),插入的行可以給出每列的值,也可只給出部分列的值,還可以向表中插入其他表的數(shù)據(jù)。使用INSERTINTO…SELECT…,可以快速地從一個或多個表中向一個表插入多個行。語法格式如下:INSERT[LOW_PRIORITY|HIGH_PRIORITY][IGNORE][INTO]tbl_name[(col_name,...)]SELECT...[ONDUPLICATEKEYUPDATEcol_name=expr,...]2.3.1插入表數(shù)據(jù)從INSERT的語法格式可以看到,使用INSERT語句可以向表中插入一行數(shù)據(jù),也可以插入多行數(shù)據(jù),插入的行可以給出每列的值,也可只給出部分列的值,還可以向表中插入其他表的數(shù)據(jù)。使用INSERTINTO…SELECT…,可以快速地從一個或多個表中向一個表插入多個行。語法格式如下:INSERT[LOW_PRIORITY|HIGH_PRIORITY][IGNORE][INTO]tbl_name[(col_name,...)]SELECT...[ONDUPLICATEKEYUPDATEcol_name=expr,...]2.3.1插入表數(shù)據(jù)【例2.13】向yhdb數(shù)據(jù)庫的數(shù)據(jù)表employees中(表中列包括員工編號、員工姓名、員工性別、入職日期、聯(lián)系電話、家庭住址、工資收入、獎金收入)中插入如下的一行:0010001張子婷02018-5-1813303161111 新華路3號 4700 1800insertintoemployeesvalues('0010001','張子婷',0,'2018-5-18',,'新華路3號',4700,1800);注意:(1)此例中,employees表中有8個字段,在values值的括號中要按照這8個字段的順序依次插入數(shù)據(jù)值,不能顛倒順序,也不能有字段不插入值。(2)數(shù)據(jù)值為字符串類型(如char、varchar、text等)和日期時間類型(如date、time等),要把值用引號括起來。數(shù)據(jù)值為數(shù)值型(如tinyint、int、float等),可以直接寫值。(3)各數(shù)據(jù)字段值用“,”間隔,這里的標點符號為英文標點。2.3.1插入表數(shù)據(jù)【例2.14】向yhdb數(shù)據(jù)庫的數(shù)據(jù)表employees中(表中列包括員工編號、員工姓名、員工性別、入職日期、聯(lián)系電話、家庭住址、工資收入、獎金收入)中插入如下的一行:0000000 張三 1 2018-5-18null null null(null表示家庭住址、工資收入、獎金收入這3個字段為空值,暫不插入內(nèi)容。)第一種:insertintoemployeesvalues('0000000','張三',1,'2018-5-18',,null,null,null);第二種:insertintoemployees(員工編號,員工姓名,員工性別,入職日期,聯(lián)系電話)values('0000000','張三',1,'2018-5-18',);第三種:(使用set子句)insertintoemployeesset員工編號='0000000',員工姓名='張三',員工性別=1,入職日期='2018-5-18',聯(lián)系電話=;2.3.1插入表數(shù)據(jù)【例2.15】完成例2.14之后,如果要插入如下一行數(shù)據(jù)庫:其中學號為主鍵(PRIMARYKEY),現(xiàn)在想再插入下列一行數(shù)據(jù):0000000 李四 1 2018-6-18null null nullinsertintoemployeesvalues('0000000','李四',1,'2018-6-18',,null,null,null);命令行將提示錯誤。replaceintoemployeesvalues('0000000','李四',1,'2018-6-18',,null,null,null);命令行沒有提示錯誤。2.3.1插入表數(shù)據(jù)MySQL也支持圖片信息的插入存儲。圖片信息的插入存儲方式有兩種:(1)圖片信息插入存儲在數(shù)據(jù)表中,可以采用直接插入要存儲的圖片的路徑,也就是以路徑的形式來存儲。(2)圖片信息插入存儲的數(shù)據(jù)表中,也可以使用LOAD_FILE函數(shù),也就是以直接插入要存儲的圖片本身。第一種,采用直接插入要存儲的圖片的路徑:insertintotest(圖片)values('D:\IMAGE\picOne.jpg');第二種,采用直接插入要存儲的圖片本身:insertintotest(圖片)values(LOAD_FILE('D:\IMAGE\picture.jpg'));要說明的是:不論采用哪種方法,我們并不能在MySQL運行的過程中看到這個圖片的圖像,只能結(jié)合其他的開發(fā)語言,如PHP、JSP、python,在開發(fā)出的網(wǎng)站或信息系統(tǒng)中才能顯示數(shù)據(jù)表中存儲的圖片圖像。2.3.1插入表數(shù)據(jù)1.使用DELETE語句刪除數(shù)據(jù)從單個表中刪除,語法格式:DELETE[LOW_PRIORITY][QUICK][IGNORE]FROMtbl_name[WHEREwhere_definition][ORDERBY...][LIMITrow_count]2.3.2刪除表數(shù)據(jù)【例2.16】目前數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中有如下數(shù)據(jù):2.3.2刪除表數(shù)據(jù)要刪除第一條記錄員工姓名為“李四”的信息可使用DELETE語句:useyhdb;deletefromemployeeswhere員工姓名='李四';要全部刪除此表中的數(shù)據(jù)記錄是:deletefromemployees;2.使用TRUNCATETABLE語句刪除表數(shù)據(jù)刪除指定表中的所有數(shù)據(jù),也可以使用TRUNCATETABLE語句,因此該語句也被稱為是清除表數(shù)據(jù)語句。語法格式:TRUNCATETABLEtable_name;說明:使用TRUNCATETABLE語句要謹慎,因為使用此語句將刪除數(shù)據(jù)表中的所有數(shù)據(jù),該語句的操作是不能恢復的。2.3.2刪除表數(shù)據(jù)TRUNCATETABLE在功能上與不帶WHERE子句的DELETE語句相同,即:deletefromemployees;等價于truncatetableemployees;這兩條語句都表示刪除數(shù)據(jù)表中的所有記錄行。區(qū)別在于TRUNCATETABLE比DELETE刪除的速度更快,并且使用的系統(tǒng)和事務日志資源更少。DELETE語句每次刪除一行,需要在事務日志中為所刪除的每行記錄一項。而TRUNCATETABLE通過釋放存儲表數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù),并且只在事務日志中記錄頁的釋放。使用TRUNCATETABLE,AUTO_INCREMENT計數(shù)器被重新設置為該列的初始值。對于參與了索引和視圖的表,不能使用TRUNCATETABLE刪除數(shù)據(jù),而應使用DELETE語句。2.3.2刪除表數(shù)據(jù)要更新數(shù)據(jù)表中的一行數(shù)據(jù),可以使用UPDATE語句,UPDATE可以用來更新一個表,也可以更新多個表。更新單個表,語法格式:UPDATE[LOW_PRIORITY][IGNORE]tbl_nameSETcol_name1=expr1[,col_name2=expr2...][WHEREwhere_definition][ORDERBY...][LIMITrow_count]2.3.3更新表數(shù)據(jù)【例2.17】更新數(shù)據(jù)庫yhdb中的數(shù)據(jù)表employees的數(shù)據(jù)記錄,將員工編號“0010001”的員工姓名更新為“張婷”,再將其工資收入增加500元。updateemployeesset員工姓名='張婷',工資收入=工資收入+500where員工編號='0010001';然后,可以使用查詢語句:select*fromemployees;進行查看,發(fā)現(xiàn)已經(jīng)更新完畢。如果上述的更新語句不添加where子句,即:updateemployeesset員工姓名='張婷',工資收入=工資收入+500;如果employees數(shù)據(jù)表中有多條記錄,將所有記錄行都變成員工姓名為“張婷”,并且工資收入都增加500元。2.3.3更新表數(shù)據(jù)1.SHOW語句SHOWTABLES或SHOWTABLESFROMDATABASE_NAME:顯示當前數(shù)據(jù)庫中所有表的名稱。SHOWDATABASES:顯示MySQL中所有數(shù)據(jù)庫的名稱。SHOWCOLUMNSFROMtable_nameFROMdatabase_name或SHOWCOLUMNSFROMdatabase_name.table_name:顯示表中各字段的名稱。SHOWGRANTSFORuser_name:顯示一個用戶的權限,顯示結(jié)果類似于GRANT命令。SHOWINDEXFROMtable_name:顯示表的索引。SHOWSTATUS:顯示一些系統(tǒng)特定資源的信息,例如,正在運行的線程數(shù)量。SHOWVARIABLES:顯示系統(tǒng)變量的名稱和值。SHOWPROCESSLIST:顯示系統(tǒng)中正在運行的所有進程,也就是當前正在執(zhí)行的查詢。大多數(shù)用戶可以查看他們自己的進程,但是如果他們擁有PROCESS權限,就可以查看所有人的進程,包括密碼。SHOWTABLESTATUS:顯示當前使用或者指定的DATABASE中的每個表的信息。信息包括表類型和表的最新更新時間。2.3.4SHOW和DESCRIBE語句1.SHOW語句SHOWPRIVILEGES:顯示服務器所支持的不同權限。SHOWCREATEDATABASEdatabase_name:顯示創(chuàng)建某一個數(shù)據(jù)庫的CREATEDATABASE語句SHOWCREATETABLEtable_name:顯示創(chuàng)建一個表的CREATETABLE語句。SHOWEVENTS:顯示所有事件的列表。SHOWINNODBSTATUS:顯示InnoDB存儲引擎的狀態(tài)。SHOWLOGS:顯示BDB存儲引擎的日志。SHOWWARNINGS:顯示最后一個執(zhí)行的語句所產(chǎn)生的錯誤、警告和通知。SHOWERRORS:只顯示最后一個執(zhí)行語句所產(chǎn)生的錯誤。SHOW[STORAGE]ENGINES:顯示安裝后的可用存儲引擎和默認引擎。SHOWPROCEDURESTATUS:顯示數(shù)據(jù)庫中所有存儲過程基本信息,包括所屬數(shù)據(jù)庫、存儲過程名稱、創(chuàng)建時間等。SHOWCREATEPROCEDUREsp_name:顯示某一個存儲過程的詳細信息。2.3.4SHOW和DESCRIBE語句【例2.19】使用SHOW語句,顯示當前所有數(shù)據(jù)庫的名稱,顯示數(shù)據(jù)庫yhdb中的各個數(shù)據(jù)表的名稱,顯示數(shù)據(jù)庫yhdb中數(shù)據(jù)表employees的各個字段的名稱。顯示當前所有數(shù)據(jù)庫的名稱:showdatabases;使用數(shù)據(jù)庫yhdb,顯示其中各個數(shù)據(jù)表的名稱:useyhdb;showtables;顯示數(shù)據(jù)表employees的各個字段的名稱:showcolumnsfromemployees;2.3.4SHOW和DESCRIBE語句2.DESCRIBE語句DESCRIBE語句用于顯示表中各列的信息,結(jié)果等于SHOWcolumnsfrom語句。語法格式:{DESCRIBE|DESC}tb1_name[col_name|wild]【例2.20】使用DESCRIBE語句查看yhdb數(shù)據(jù)庫中的employees表結(jié)構(gòu)信息,也就是各字段的信息。useyhdb;describeemployees;【例2.21】使用DESC語句查看yhdb數(shù)據(jù)庫中的employees表中員工姓名列的信息。descemployees員工姓名;2.3.4SHOW和DESCRIBE語句單元三
查看數(shù)據(jù)任務一
單表查詢使用數(shù)據(jù)庫和表的主要目的是存儲數(shù)據(jù)以便在需要時進行檢索、統(tǒng)計或組織輸出,通過SQL語句的查詢可以從表或視圖中迅速方便地檢索數(shù)據(jù)。SQL的SELECT語句可以實現(xiàn)對表的選擇、投影及連接操作。SELECT語句可以從一個或多個表中選取特定的行和列,結(jié)果通常是生成一個臨時表。在執(zhí)行過程中系統(tǒng)根據(jù)用戶的標準從數(shù)據(jù)庫中選出匹配的行和列,并將結(jié)果放到臨時的表中,這就是實現(xiàn)選擇和投影運算的一個形式。下面介紹SELECT語句,它是SQL的核心。查詢SELECT[ALL|DISTINCT|DISTINCTROW][HIGH_PRIORITY][STRAIGHT_JOIN][SQL_SMALL_RESULT][SQL_BIG_RESULT][SQL_BUFFER_RESULT][SQL_CACHE|SQL_NO_CACHE][SQL_CALC_FOUND_ROWS]select_expr,...[INTOOUTFILE'file_name'export_options|INTODUMPFILE'file_name'][FROMtable_reference[,table_reference]…] /*FROM子句*/[WHEREwhere_definition] /*WHERE子句*/[GROUPBY{col_name|expr|position}[ASC|DESC],...[WITHROLLUP]] /*GROUPBY子句*/[HAVINGwhere_definition] /*HAVING子句*/[ORDERBY{col_name|expr|position} [ASC|DESC],...] /*ORDERBY子句*/[LIMIT{[offset,]row_count|row_countOFFSEToffset}] /*LIMIT子句*/查詢使用SELECT語句選擇一個表中的某些列,各列名之間要以逗號分隔?!纠?.1】查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中所有員工的員工姓名、入職日期和工資收入。語句如下:useyhdb;select員工姓名,入職日期,工資收入fromemployees;【例3.2】查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中所有員工的全部信息。語句如下:select*fromemployees;說明:上述語句中的“*”號,表示數(shù)據(jù)表中的所有字段。3.1.1選擇指定的列當希望查詢結(jié)果中的某些列或所有列顯示時且使用自己選擇的列標題時,可以在列名之后使用AS子句來更改查詢結(jié)果的列別名。語法格式為:SELECTcolumn_name[AS]column_alias【例3.3】查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中所有員工的員工姓名、家庭住址和工資收入,結(jié)果中的各字段名分別定義為employeesname、address和income。語句如下:select員工姓名as'employeesname',家庭住址asaddress,工資收入incomefromemployees;注意:(1)字段名稱當自定義的列標題中含有空格時,必須使用引號將標題括起來,如'employeesname'。(2)“AS”可以省略。3.1.2定義新的字段名在對表進行查詢時,有時對所查詢的某些字段,希望得到的是一種概念而不是具體的數(shù)據(jù)。例如查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中所有員工的工資收入,所希望知道的是工資收入的總體情況,這時,就可以用等級來替換工資收入的具體數(shù)字。要替換查詢結(jié)果中的數(shù)據(jù),則要使用查詢中的CASE表達式,格式為:CASEWHEN條件1THEN表達式1WHEN條件2THEN表達式2……ELSE表達式END3.1.3替換查詢結(jié)果中的數(shù)據(jù)【例3.4】查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中所有員工的員工姓名,入職日期和工資收入,對其工資收入按以下規(guī)則進行替換:若工資收入小于等于4000元,替換為“較低工資”;若工資收入大于4000元并且小于4500元,替換為“中等工資”;若工資收入大于等于4500元,替換為“較高工資”,并將工資收入字段名更改為“工資等級”。select員工姓名,入職日期,casewhen工資收入<=4000then'較低工資'when工資收入>4000and工資收入<4500then'中等工資'else'較高工資'endas'工資等級'fromemployees;3.1.3替換查詢結(jié)果中的數(shù)據(jù)使用SELECT對列進行查詢時,在結(jié)果中可以輸出對列值計算后的值,即SELECT子句可使用表達式作為結(jié)果,格式為:SELECTexpression[,expression]【例3.5】計算數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中所有員工的總收入(總收入=工資收入+獎金收入)。select員工姓名,工資收入+獎金收入as'總收入'fromemployees;3.1.4計算列值對表只選擇其某些列時,可能會出現(xiàn)重復行。例如,若對數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中只選擇工資收入,則出現(xiàn)多行重復的情況??梢允褂肈ISTINCT或DISTINCTROW關鍵字消除結(jié)果集中的重復行,其格式是:SELECTDISTINCT|DISTINCTROWcolumn_name[,column_name…]其含義是對結(jié)果集中的重復行只選擇一個,保證行的唯一性?!纠?.6】對數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中只選擇工資收入,消除結(jié)果集中的重復行。selectdistinct工資收入fromemployees;3.1.5消除結(jié)果集中的重復行SELECT子句的表達式中還可以包含所謂的聚合函數(shù)。聚合函數(shù)常常用于對一組值進行計算,然后返回單個值。除COUNT函數(shù)外,聚合函數(shù)都會忽略空值。聚合函數(shù)通常與GROUPBY子句一起使用。如果SELECT語句中有一個GROUPBY子句,則這個聚合函數(shù)對所有列起作用,如果沒有,則SELECT語句只產(chǎn)生一行作為結(jié)果。3.1.6聚合函數(shù)1.COUNT函數(shù)聚合函數(shù)中最經(jīng)常使用的是COUNT()函數(shù),用于統(tǒng)計組中滿足條件的行數(shù)或總行數(shù),返回SELECT語句檢索到的行中非NULL值的數(shù)目,若找不到匹配的行,則返回0。語法格式為:COUNT({[ALL|DISTINCT]expression}|*)其中,expression是一個表達式,其數(shù)據(jù)類型是除BLOB或TEXT之外的任何類型。ALL表示對所有值進行運算,DISTINCT表示去除重復值,默認為ALL。使用COUNT(*)時將返回檢索行的總數(shù)目,不論其是否包含NULL值?!纠?.7】求數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中員工的總?cè)藬?shù)。selectcount(*)as'員工總?cè)藬?shù)'fromemployees;【例3.8】統(tǒng)計數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中有獎金收入的員工人數(shù)。selectcount(獎金收入)as有獎金人數(shù)fromemployees;3.1.6聚合函數(shù)2.MAX和MINMAX和MIN分別用于求表達式中所有值項的最大值與最小值,語法格式為:MAX/MIN([ALL|DISTINCT]expression)其中,expression是常量、列、函數(shù)或表達式,其數(shù)據(jù)類型可以是數(shù)字、字符和時間日期類型?!纠?.9】求數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中員工的最高工資收入和最低工資收入。SELECTMAX(成績),MIN(成績)selectmax(工資收入)最高工資,min(工資收入)最低工資fromemployees;注意:當給定字段上只有空值或檢索出的中間結(jié)果為空時,MAX和MIN函數(shù)的值也為空。3.1.6聚合函數(shù)3.SUM函數(shù)和AVG函數(shù)SUM和AVG分別用于求表達式中所有值項的總和與平均值,語法格式為:SUM/AVG([ALL|DISTINCT]expression)其中,expression是常量、列、函數(shù)或表達式,其數(shù)據(jù)類型只能是數(shù)值型數(shù)據(jù)?!纠?.10】求數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中員工的總工資收入和總獎金收入。selectsum(工資收入)總工資收入,sum(獎金收入)總獎金收入fromemployees;【例3.11】求數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中員工的平均工資收入和平均獎金收入。selectavg(工資收入)平均工資收入,avg(獎金收入)平均獎金收入fromemployees;3.1.6聚合函數(shù)4.VARIANCE和STDDEV(STD)函數(shù)VARIANCE和STDDEV函數(shù)分別用于計算特定的表達式中的所有值的方差和標準差。語法格式:VARIANCE/STDDEV([ALL|DISTINCT]expression)【例3.12】求數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中員工工資收入的方差。selectvariance(工資收入)工資收入方差fromemployees;說明:方差的計算按照以下幾個步驟進行。①計算相關列的平均值;②求列中的每一個值和平均值的差;③計算差值的平方的總和;④用總和除以(列中的)值得結(jié)果。STDDEV函數(shù)用于計算標準差。標準差等于方差的平均根。所以,STDDEV(…)和SQRT(VARIANCE(…))這兩個表達式是相等的。3.1.6聚合函數(shù)【例3.13】求數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中員工工資收入的標準差。selectstd(工資收入)工資收入標準差fromemployees;STDDEV可以縮寫為STD,這對結(jié)果沒有影響。3.1.6聚合函數(shù)5.GROUP_CONCAT函數(shù)MySQL支持一個特殊的聚合函數(shù)GROUP_CONCAT函數(shù)。該函數(shù)返回來自一個組指定列的所有非NULL值,這些值一個接著一個放置,中間用逗號隔開,并表示為一個長長的字符串。這個字符串的長度是有限制的,標準值是1024。語法格式為:GROUP_CONCAT({[ALL|DISTINCT]expression}|*)【3.14】求數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中所有工資收入是4500元的員工姓名。selectgroup_concat(員工姓名)fromemployeeswhere工資收入=4500;3.1.6聚合函數(shù)6.BIT_AND、BIT_OR和BIT_XOR與二進制運算符|(或)、&(與)和^(異或)相對應的聚合函數(shù)也存在,分別是BIT_OR、BIT_AND、BIT_XOR。例如,函數(shù)BIT_OR在一字段中的所有值上執(zhí)行一個二進制OR。語法格式為:BIT_AND|BIT_OR|BIT_XOR({[ALL|DISTINCT]expression}|*)例如,有一個數(shù)據(jù)表demo,其中有一數(shù)據(jù)類型為int型的字段column,該字段有2個數(shù)據(jù)值,分別是1、3,如執(zhí)行:selectbin(bit_or(column))fromdemo;則結(jié)果為:011。其中BIN函數(shù)用于將結(jié)果轉(zhuǎn)換為二進制位。因為“1”對應的二進制值是“001”,“3”對應的二進制值是“011”,bit_or(column)的含義是“001|011”,則為“011”。如果把bit_or替換為bit_and,則結(jié)果為:001。如果把bit_or替換為bit_xor,則結(jié)果為:010。3.1.6聚合函數(shù)任務二
子查詢WHERE子句必須緊跟FROM子句之后,在WHERE子句中,使用一個條件從FROM子句的中間結(jié)果中選取行。WHERE子句會根據(jù)條件對FROM子句的中間結(jié)果中的行一行一行地進行判斷,當條件為TRUE的時候,一行就被包含到WHERE子句的中間結(jié)果中。說明:IN關鍵字既可以指定范圍,也可以表示子查詢。在SQL中,返回邏輯值(TRUE或FALSE)的運算符或關鍵字都可稱為謂詞。判定運算包括比較運算、模式匹配、范圍比較、空值比較和子查詢。WHERE子句比較運算符用于比較兩個表達式值,MySQL支持的比較運算符有:=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<=>(相等或都等于空)、<>(不等于)、!=(不等于)。比較運算的語法格式為:expression{=|<|<=|>|>=|<=>|<>|!=}expression其中expression是除TEXT和BLOB外類型的表達式。當兩個表達式值均不為空值(NULL)時,除了“<=>”運算符,其他比較運算返回邏輯值TRUE(真)或FALSE(假);而當兩個表達式值中有一個為空值或都為空值時,將返回UNKNOWN。3.2.1比較運算【例3.15】查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中員工編號為0020002的員工姓名、家庭住址和聯(lián)系電話。select員工姓名,家庭住址,聯(lián)系電話fromemployeeswhere員工編號='0020002';【例3.16】查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中工資收入大于等于4600的員工姓名、員工性別和入職日期。select員工姓名,員工性別,入職日期fromemployeeswhere工資收入>=4600;3.2.1比較運算MySQL有一個特殊的等于運算符“<=>”,當兩個表達式彼此相等或都等于空值時,它的值為TRUE,其中有一個空值或都是非空值但不相等,這個條件就是FALSE。沒有UNKNOWN的情況?!纠?.17】查詢數(shù)據(jù)庫yhdb的數(shù)據(jù)表employees中獎金收入是NULL的情況。select*fromemployeeswhere獎金收入<=>null;執(zhí)行結(jié)果如下:Emptyset這里的執(zhí)行結(jié)果“Emptyset”表示沒有查詢出符合要求的數(shù)據(jù)記錄,沒有獎金收入是NULL的情況?!?lt;=>”是一個MySQL的特殊的等于運算符,表示“是”的含義,也
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金屬制品加工搬遷項目環(huán)評報告表
- 廣東柜面暗訪檢查標準考試專項試題
- 車輛檢修工必知必會練習卷含答案
- 2024幼兒園轉(zhuǎn)讓合同書范文
- 時事練習試題
- 2024排污許可技術合同
- 溫泉度假酒店項目風險評估與應對策略
- 公司解散協(xié)議
- 2023年中國電信股份有限公司池州分公司招聘筆試真題
- 倉儲庫房防火安全協(xié)議(2024年版)
- 《醫(yī)療物品多旋翼無人機運輸技術規(guī)范(征求意見稿)》
- 心理學:學前兒童發(fā)展心理學試題預測
- 艾滋病人的護理課件
- 珠海2024年廣東珠海市總工會招聘社會化工會工作者7人筆試歷年典型考題及考點附答案解析
- 2024版合同范本之二手車場地租賃合同
- 8隊淘汰賽-對陣表
- 機器學習(山東聯(lián)盟)智慧樹知到期末考試答案章節(jié)答案2024年山東財經(jīng)大學
- 汽車銷售行業(yè)常見涉稅風險點及識別
- 水庫網(wǎng)絡安全設備升級投標方案技術標
- 小學一年級拼音天天練
- CTD申報資料撰寫模板:模塊三之3.2.S.3特性鑒定
評論
0/150
提交評論