版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《MySQL實用教程(第4版)》第1章
數(shù)據(jù)庫基礎(chǔ)第2章
數(shù)據(jù)類型第3章
數(shù)據(jù)庫和表第4章
查詢和視圖第5章
索引與數(shù)據(jù)完整性第6章SQL擴展語言和系統(tǒng)函數(shù)第7章
過程式數(shù)據(jù)庫對象第8章
數(shù)據(jù)庫備份與恢復(fù)第9章
用戶管理和權(quán)限控制第10章
事務(wù)管理和多用戶操作全套可編輯PPT課件
第1章
數(shù)據(jù)庫基礎(chǔ)——數(shù)據(jù)庫基本概念全套可編輯PPT課件
01數(shù)據(jù)庫及其系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫及其系統(tǒng)1.數(shù)據(jù)庫數(shù)據(jù)庫(Database,簡稱DB)是存放數(shù)據(jù)的倉庫,而且這些數(shù)據(jù)存在一定的關(guān)聯(lián),并按一定的格式存放在計算機內(nèi)。例如,把一個學(xué)校的學(xué)生、課程、成績等數(shù)據(jù)有序地組織并存放在計算機內(nèi),就構(gòu)成一個數(shù)據(jù)庫。2.數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫管理系統(tǒng)(DataBaseManagementSystem,簡稱DBMS)按一定的數(shù)據(jù)模型組織數(shù)據(jù)形成數(shù)據(jù)庫,并對其進行管理。簡單地說,DBMS就是管理數(shù)據(jù)庫的系統(tǒng)(軟件)。數(shù)據(jù)庫管理員(DataBaseAdministrator,簡稱DBA)通過DBMS對數(shù)據(jù)庫進行管理。數(shù)據(jù)庫及其系統(tǒng)3.數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)與操作數(shù)據(jù)庫的應(yīng)用程序,加上支撐它們的硬件平臺、軟件平臺和與數(shù)據(jù)庫有關(guān)的人員一起構(gòu)成一個完整的數(shù)據(jù)庫系統(tǒng)。如圖所示描述了數(shù)據(jù)庫系統(tǒng)的構(gòu)成。02數(shù)
據(jù)
模
型層次模型網(wǎng)狀模型關(guān)系模型數(shù)據(jù)模型1.層次模型層次模型將數(shù)據(jù)組織成一對多關(guān)系的結(jié)構(gòu),采用關(guān)鍵字來訪問其中每一層次的每一部分。它存取方便且速度快;結(jié)構(gòu)清晰,容易理解;容易實現(xiàn)數(shù)據(jù)修改和數(shù)據(jù)庫擴展;檢索關(guān)鍵屬性十分方便。但缺點是結(jié)構(gòu)不夠靈活;同一屬性的數(shù)據(jù)要存儲多次,冗余大;不適合拓撲空間數(shù)據(jù)的組織。如圖所示為按層次模型組織的數(shù)據(jù)示例。數(shù)據(jù)模型2.網(wǎng)狀模型網(wǎng)狀模型是具有多對關(guān)系的數(shù)據(jù)組織方式。它能明確而方便地表示數(shù)據(jù)間的復(fù)雜關(guān)系;數(shù)據(jù)冗余小。但網(wǎng)狀結(jié)構(gòu)的復(fù)雜,增加了用戶查詢和定位的困難;需要存儲數(shù)據(jù)間聯(lián)系的指針,使得數(shù)據(jù)量增大;數(shù)據(jù)的修改不方便。如圖所示為按網(wǎng)狀模型組織的數(shù)據(jù)示例。數(shù)據(jù)模型3.關(guān)系模型關(guān)系模型以記錄組或二維數(shù)據(jù)表的形式組織數(shù)據(jù)。例如,在學(xué)生成績管理系統(tǒng)的3個表中,“學(xué)生”表涉及的主要信息有學(xué)號、姓名、性別、出生時間、專業(yè)、總學(xué)分和備注;“課程”表涉及的主要信息有課程號、課程名、開課學(xué)期、學(xué)時和學(xué)分;“成績”表涉及的主要信息有學(xué)號、課程號和成績。如表1、表2和表3所示分別描述了這3個表的部分數(shù)據(jù)。表1“學(xué)生”表學(xué)號姓名性別出生時間專業(yè)總學(xué)分備注081101王林男1994-02-10計算機50
081103王燕女1993-10-06計算機50
081108林一帆男1993-08-05計算機52已提前修完一門課程081202王林男1993-01-29通信工程40有一門課程不及格,待補考081204馬琳琳女1993-02-10通信工程42
數(shù)據(jù)模型表2“課程”表課程號課程名開課學(xué)期學(xué)時學(xué)分0101計算機基礎(chǔ)18050102程序設(shè)計與語言26840206離散數(shù)學(xué)4684表3“成績”表學(xué)號課程號成績學(xué)號課程號成績08110110180081108101850811011027808110810264081101206760811082068708110310162081202101650811031027008120410191數(shù)據(jù)模型表中的一行稱為一個記錄,一列稱為一個字段,每列的標題(列名)稱為字段名。如果給每個關(guān)系表起一個名字,則有若干個字段的關(guān)系表可表示為如下形式:表名(字段名,...)通常把關(guān)系表的結(jié)構(gòu)稱為關(guān)系模式。在關(guān)系表中,如果一個字段或幾個字段組合的值可唯一標識其對應(yīng)的記錄,則稱該字段或字段組合為碼。03關(guān)
系
數(shù)
據(jù)
庫關(guān)系型數(shù)據(jù)庫管理系統(tǒng)關(guān)系型數(shù)據(jù)庫語言關(guān)系數(shù)據(jù)庫1.關(guān)系型數(shù)據(jù)庫管理系統(tǒng)從當前國際數(shù)據(jù)庫管理系統(tǒng)(DataBaseManagementSystem,簡稱DBMS)排名中可以看出來,關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RelationalDatabaseManagementSystem,簡稱RDBMS)絕對是DBMS的主流。RDBMS就是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,其中使用最多的RDBMS分別是Oracle、MySQL和SQLServer。MySQL是目前流行的開放關(guān)系數(shù)據(jù)庫管理系統(tǒng)之一。2.關(guān)系型數(shù)據(jù)庫語言結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,簡稱SQL)就是關(guān)系型數(shù)據(jù)庫的查詢語言,用于定義數(shù)據(jù)庫及其對象,操作數(shù)據(jù)庫對象數(shù)據(jù)和控制操作數(shù)據(jù)庫的安全性等,所有提供數(shù)據(jù)庫產(chǎn)品的廠商都支持SQL語言,但它們又各有其特點。為了在各個數(shù)據(jù)庫廠商之間取得更大的統(tǒng)一性,美國國家標準學(xué)會(AmericanNationalStandardsInstitute,簡稱ANSI)于1986年發(fā)布了第一個SQL標準,并于1989年發(fā)布了第二個版本,該版本已經(jīng)被廣泛地采用。ANSI在1992年更新了SQL標準的版本,即SQL92和SQL2,并于1999年再次更新為SQL99和SQL3標準。第1章
數(shù)據(jù)庫基礎(chǔ)——數(shù)據(jù)庫設(shè)計01概念模型一對一的聯(lián)系(1∶1)一對多的聯(lián)系(1∶n)多對多的聯(lián)系(m∶n)概念模型概念模型用于信息世界的建模,常用的E-R模型、擴充的E-R模型、面向?qū)ο竽P图爸^詞模型。通常,E-R模型把每一類數(shù)據(jù)對象的個體稱為“實體”,把每一類對象個體的集合稱為“實體集”。例如,在學(xué)生成績管理系統(tǒng)中主要涉及“學(xué)生”和“課程”兩個實體集,其他非主要的實體可以很多,如班級、班長、任課教師、輔導(dǎo)員。每個實體集涉及的信息項稱為屬性。就“學(xué)生”實體集而言,它的屬性有學(xué)號、姓名、性別、出生時間、專業(yè)、總學(xué)分和備注。“課程”實體集屬性有課程號、課程名、開課學(xué)期、學(xué)時和學(xué)分。實體集中的實體彼此是可區(qū)別的。如果實體集中的屬性或最小屬性組合的值能唯一標識其對應(yīng)實體,則將該屬性或?qū)傩越M合稱為碼。碼可能有多個,對于每一個實體集,可指定一個碼為主碼。實體集A和實體集B之間存在各種關(guān)系,通常把這些關(guān)系稱為“聯(lián)系”,將實體集及實體集聯(lián)系的圖示稱為實體-聯(lián)系(EntityRelationship,E-R)模型。概念模型E-R圖就是E-R模型的描述方法,即實體-聯(lián)系圖。通常,關(guān)系數(shù)據(jù)庫的設(shè)計者使用E-R圖來對信息世界建模。在E-R圖中,使用矩形表示實體集,使用橢圓表示屬性,使用菱形表示聯(lián)系,用線段連接實體集與屬性,當一個屬性或?qū)傩越M合指定為主碼時,在實體集與屬性的連接線上標記一條斜線。如圖所示,其中屬性用圓角矩形表示。概念模型1.一對一的聯(lián)系(1∶1)A中的一個實體最多與B中的一個實體相聯(lián)系,B中的一個實體也最多與A中的一個實體相聯(lián)系。例如,“班級”與“班長”這兩個實體集之間的聯(lián)系是一對一的聯(lián)系,因為一個班級只有一個班長,反過來,一個班長只屬于一個班級。“班級”與“班長”兩個實體集的E-R模型如圖。概念模型2.一對多的聯(lián)系(1∶n)A中的一個實體可以與B中的多個實體相聯(lián)系,而B中的一個實體最多與A中的一個實體相聯(lián)系。例如,“班級”與“學(xué)生”這兩個實體集之間的聯(lián)系是一對多的聯(lián)系,因為一個班級可有若干學(xué)生,反過來,一個學(xué)生只能屬于一個班級?!鞍嗉墶迸c“學(xué)生”兩個實體集的E-R模型如圖。概念模型3.多對多的聯(lián)系(m∶n)A中的一個實體可以與B中的多個實體相聯(lián)系,而B中的一個實體也可與A中的多個實體相聯(lián)系。例如,“學(xué)生”與“課程”這兩個實體集之間的聯(lián)系是多對多的聯(lián)系,因為一個學(xué)生可選修多門課程,反過來,一門課程可被多個學(xué)生選修。“學(xué)生”與“課程”兩個實體集的E-R模型如圖。02邏
輯
模
型(1∶1)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換(1∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換(m∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換邏
輯
模
型1.(1∶1)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對于(1∶1)聯(lián)系,既可以單獨對應(yīng)一個關(guān)系模式,也可以不單獨對應(yīng)一個關(guān)系模式。(1)聯(lián)系單獨對應(yīng)一個關(guān)系模式,則由聯(lián)系的屬性、參與聯(lián)系的各實體集的主碼屬性構(gòu)成關(guān)系模式,其主碼可選參與聯(lián)系的實體集的任一方的主碼。例如,考慮圖描述的“班級(bj)”與“班長(bz)”實體集通過屬于(sy)聯(lián)系的E-R模型,可設(shè)計如下關(guān)系模式(下橫線表示該字段為主碼):bj(班級編號,院系,專業(yè),人數(shù))bz(學(xué)號,姓名)sy(學(xué)號,班級編號)(2)聯(lián)系不單獨對應(yīng)一個關(guān)系模式,聯(lián)系的屬性及一方的主碼加入另一方實體集對應(yīng)的關(guān)系模式中。例如,考慮圖描述的“班級(bj)”與“班長(bz)”實體集通過屬于(sy)聯(lián)系的E-R模型,可設(shè)計如下關(guān)系模式:bj(班級編號,院系,專業(yè),人數(shù))bz(學(xué)號,姓名,班級編號)或者:bj(班級編號,院系,專業(yè),人數(shù),學(xué)號)bz(學(xué)號,姓名)邏
輯
模
型2.(1∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對于(1∶n)的聯(lián)系,既可以單獨對應(yīng)一個關(guān)系模式,也可以不單獨對應(yīng)一個關(guān)系模式。(1)聯(lián)系單獨對應(yīng)一個關(guān)系模式,則由聯(lián)系的屬性、參與聯(lián)系的各實體集的主碼屬性構(gòu)成關(guān)系模式,n端的主碼作為該關(guān)系模式的主碼。例如,考慮圖描述的“班級(bj)”與“學(xué)生(xs)”實體集E-R模型可設(shè)計如下關(guān)系模式:bj(班級編號,院系,專業(yè),人數(shù))xs(學(xué)號,姓名,性別,出生時間,專業(yè),總學(xué)分,備注)sy(學(xué)號,班級編號)(2)聯(lián)系不單獨對應(yīng)一個關(guān)系模式,則將聯(lián)系的屬性及1端的主碼加入n端實體集對應(yīng)的關(guān)系模式中,主碼仍為n端的主碼。例如,圖描述的“班級(bj)”與“學(xué)生(xs)”實體集E-R模型可設(shè)計如下關(guān)系模式:bj(班級編號,院系,專業(yè),人數(shù))xs(學(xué)號,姓名,性別,出生時間,專業(yè),總學(xué)分,備注,班級編號)邏
輯
模
型3.(m∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對于(m∶n)聯(lián)系,單獨對應(yīng)一個關(guān)系模式,該關(guān)系模式包括聯(lián)系的屬性、參與聯(lián)系的各實體集的主碼屬性,該關(guān)系模式的主碼由各實體集的主碼屬性共同組成。例如,圖描述的“學(xué)生(xs)”與“課程(kc)”實體集之間的聯(lián)系可設(shè)計如下關(guān)系模式:xs(學(xué)號,姓名,性別,出生時間,專業(yè),總學(xué)分,備注)kc(課程號,課程名,開課學(xué)期,學(xué)時,學(xué)分)xs_kc(學(xué)號,課程號,成績)關(guān)系模式xs_kc的主碼是由“學(xué)號”和“課程號”兩個屬性組合起來構(gòu)成的,一個關(guān)系模式只能有一個主碼。03物
理
模
型物
理
模
型物理模型是面向計算機物理表示的模型,描述了數(shù)據(jù)在儲存介質(zhì)上的組織結(jié)構(gòu),它不但與具體的DBMS有關(guān),而且與操作系統(tǒng)和硬件有關(guān)。每一種邏輯數(shù)據(jù)模型在實現(xiàn)時都有其對應(yīng)的物理數(shù)據(jù)模型。DBMS為了保證其獨立性與可移植性,大部分物理數(shù)據(jù)模型的實現(xiàn)工作由系統(tǒng)自動完成,而設(shè)計者只設(shè)計索引、聚集等特殊結(jié)構(gòu)。第1章
數(shù)據(jù)庫基礎(chǔ)——MySQL安裝、配置和運行01MySQL安裝和配置MySQL安裝和配置MySQL5.7可以通過安裝包方式,也可以通過壓縮包方式安裝和配置。安裝包和壓縮包可從MySQL官網(wǎng)(/downloads)免費下載。在安裝MySQL前,須確保系統(tǒng)中已安裝了最新的Microsoft.NETFramework。02MySQL數(shù)據(jù)庫試運行啟動MySQL服務(wù)登錄MySQL實例設(shè)置MySQL擴展中文字符集賦予用戶root所有權(quán)限MySQL數(shù)據(jù)庫試運行1.啟動MySQL服務(wù)打開“Windows任務(wù)管理器”,在“進程”頁可以看到MySQL進程mysqld.exe,在“服務(wù)”頁可以看到對應(yīng)的“MySQL57”服務(wù)已經(jīng)啟動了,如圖。MySQL數(shù)據(jù)庫試運行2.登錄MySQL實例右擊Windows開始按鈕,選擇“運行(R)”,在“運行”對話框中輸入“cmd”后按“Enter”鍵,進入Windows命令行窗口。說明:Windows命令行窗口是默認黑色背景白字,可以設(shè)置窗口屬性修改為白色背景黑字。在Windows命令行窗口中輸入下列命令(加黑文本)改變當前目錄到指定目錄:C:\...>cdC:\ProgramFiles\MySQL\MySQLServer5.7\bin輸入下列命令(加黑文本)連接MySQL實例,登錄MySQL:C:\ProgramFiles\MySQL\MySQLServer5.7\bin>mysql-uroot-p回車后,在系統(tǒng)提示“Enterpassword:”處輸入密碼(安裝MySQL時設(shè)置):Enterpassword:123456MySQL數(shù)據(jù)庫試運行顯示如圖所示的歡迎信息。顯示提示符“mysql>”表示進入了MySQL的命令行模式。在“mysql>”下輸入“quit”,可退出MySQL返回Windows命令行模式。MySQL數(shù)據(jù)庫試運行3.設(shè)置MySQL擴展中文字符集為了讓MySQL數(shù)據(jù)庫能夠支持中文,必須設(shè)置系統(tǒng)字符集編碼。輸入MySQL的SQL命令:SETCHARACTER_SET_DATABASE='gbk';SETCHARACTER_SET_SERVER='gbk';STATUS;將數(shù)據(jù)庫和服務(wù)器的字符集均設(shè)為gbk(中文),系統(tǒng)顯示修改后MySQL的狀態(tài)信息,可查看當前系統(tǒng)字符集如圖。MySQL數(shù)據(jù)庫試運行4.賦予用戶root所有權(quán)限操作MySQL時,由于不同操作系統(tǒng)默認的權(quán)限存在差異,有些功能無法使用,建議進行下列操作權(quán)限設(shè)置。mysql>USEmysql;GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'123456'WITHGRANTOPTION;FLUSHPRIVILEGES;說明:USEmysql:打開系統(tǒng)數(shù)據(jù)庫mysql。GRANT…:賦予root用戶(登錄密碼123456)所有權(quán)限,這樣才能操作該MySQL實例所有功能,否則不能操作部分功能。執(zhí)行結(jié)果如圖。第1章
數(shù)據(jù)庫基礎(chǔ)——常用MySQL界面工具01界面工具簡介圖形化客戶端基于Web的管理工具界面工具簡介1.圖形化客戶端這類工具采用C/S架構(gòu),用戶通過安裝在計算機中的客戶端軟件連接并操作后臺的MySQL數(shù)據(jù)庫,原理如圖,客戶端是圖形化用戶界面(GUI)。除了MySQL官方提供的管理工具MySQLAdministrator和MySQLWorkbench外,還有很多第三方開發(fā)的優(yōu)秀工具,比較著名的有Navicat、SequelPro、HeidiSQL、SQLMaestroMySQLToolsFamily、SQLWave、dbForgeStudio、DBToolsManager、MyDBStudio、AquaDataStudio、SQLyog、MySQL-Front、SQLBuddy等。界面工具簡介2.基于Web的管理工具這類工具采用B/S架構(gòu),用戶無須在計算機中安裝客戶端,管理工具運行于Web服務(wù)器上,如圖所示。用戶機器只要帶有瀏覽器,就能以訪問Web頁面的方式操作MySQL數(shù)據(jù)庫。02圖形化界面工具創(chuàng)建MySQL服務(wù)器實例連接Navicat界面和功能簡介MySQL語句的執(zhí)行圖形化界面工具1.創(chuàng)建MySQL服務(wù)器實例連接首先需要連接MySQL服務(wù)器實例,然后在該連接下操作MySQL。啟動Navicat,單擊“連接”按鈕,創(chuàng)建MySQL服務(wù)器實例連接,如圖。其中:連接名:是用戶自己定義的連接MySQL服務(wù)器的名稱。主機:指定MySQL服務(wù)器對應(yīng)的計算機。如果MySQL服務(wù)器就在本機(筆者主機名HUAWEI)上,主機名可以使用HUAWEI,也可使用localhost或IP地址。端口:在安裝MySQL時,選擇默認通過“TCP/IP”協(xié)議3306端口號訪問MySQL服務(wù)器,所以這里指定端口號3306。圖形化界面工具2.Navicat界面和功能簡介Navicat創(chuàng)建上述連接后,界面顯示如圖。圖形化界面工具3.MySQL語句的執(zhí)行MySQL語句在查詢編輯器窗口輸入和執(zhí)行。單擊“新建查詢”按鈕,系統(tǒng)新建一個查詢編輯器窗口頁。已經(jīng)創(chuàng)建的查詢編輯器窗口頁仍然存在,但可以隨時關(guān)閉。查詢編輯器窗口系統(tǒng)除了顯示子功能外,還顯示連接和數(shù)據(jù)庫下拉列表框供用戶選擇,表示查詢指定連接下選擇的數(shù)據(jù)庫。也就是說,在不同的查詢編輯器窗口下,可以使用不同用戶連接的MySQL實例中的不同數(shù)據(jù)庫。圖形化界面工具在文本編輯區(qū)輸入SQL語句,單擊“”,在其下部“結(jié)果”選項卡顯示SQL語句的執(zhí)行結(jié)果。如圖。第2章
數(shù)
據(jù)
類
型——數(shù)
值
型01整
數(shù)
類
型整數(shù)類型整數(shù)類型包括的數(shù)據(jù)類型如表。數(shù)據(jù)類型字節(jié)數(shù)有符號范圍無符號范圍(含)tinyint1-128~127(-27~27-1)0~255(0~28-1)smallint2-32768~32767(-215~215-1)0~65535(0~216-1)mediumint3-8388608~8388607(-223~223-1)0~16777215(0~224-1)intinteger4-2147483648~2147483647(-231~231-1)0~4294967295(0~232-1)bigint8±9.22×1018(-263~263-1)0~1.84×1019(0~264-1)02實
數(shù)
類
型單精度浮點類型雙精度浮點類型定點類型實數(shù)類型實數(shù)類型包括浮點類型和定點類型,浮類點類型分為單精度浮點型(float和real)和雙精度浮點型(double),它們遵循IEEE754標準;而定點型為decimal或者numeric型,實數(shù)類型定義格式如下:實數(shù)類型名(長度.小數(shù)位)1.單精度浮點類型表達單精度浮點數(shù)的float或real類型數(shù)據(jù)占4字節(jié),其中1位表示符號位,8位表示指數(shù),23位表示尾數(shù)。其中:有符號數(shù)表示范圍:(-3.402823466E+38~1.175494351E-38),0,(1.175494351E-38~3.402823466351E+38);無符號數(shù)表示范圍:0,(1.175494351E-38~3.402823466E+38)。float可以用含小數(shù)的數(shù)值表示,也可以用科學(xué)記數(shù)法表示,但只保證6位有效數(shù)字的準確性。定義float(m,d)表示數(shù)值總長為m位,其中有d位小數(shù)。例如,列設(shè)置為float(10,2),輸入-3584678.268,查詢結(jié)果為-3584678.25。實數(shù)類型2.雙精度浮點類型表達雙精度浮點數(shù)double類型數(shù)據(jù)占8字節(jié),其中1位表示符號位,11位表示指數(shù),52位表示尾數(shù)。其中:有符號數(shù)表示范圍:(-1.7976931348623157E+308~2.2250738585072014E-308),0,(2.2250738585072014E-308~1.7976931348623157E+308);無符號數(shù)表示范圍:0,(2.2250738585072014E-308~1.7976931348623157E+308)。定義double(m,d)表示數(shù)值總長為m位,其中有d位小數(shù)。double只保證16位有效數(shù)字的準確性。實數(shù)類型3.定點類型定點類型為decimal或者numeric類型,它們是同義詞,用于存儲定點數(shù),保存必須為確切精度的值,例如會計系統(tǒng)中的貨幣數(shù)據(jù)。定點類型數(shù)值總長度范圍為1~65,默認為10位數(shù)字,沒有小數(shù)位。定義decimal(m,d)表示總長度m位,其中有d位小數(shù)。decimal(m)沒有小數(shù)。小數(shù)部分超出d位,若四舍五入后,整數(shù)部分沒有超出范圍,則只給出警告,但能成功操作并四舍五入刪除多余的小數(shù)位后保存;若四舍五入后,整數(shù)部分超出范圍,則會報錯,并拒絕處理。例如,列設(shè)置為decimal(10,2),輸入-3584678.268,查詢結(jié)果為-3584678.27。03位
類
型位
類
型位類型就是bit類型,bit(n)型允許存儲n位二進制位值(n取值為1~64,默認為1)。與tinyint相比,即使僅僅存儲0和1兩種狀態(tài)的值,也需要1個字節(jié),而bit(1)存儲0和1兩種狀態(tài)的值只需要1個二進制位。如果我們存儲的狀態(tài)不超過2n,就可以使用bit(n)。另外,向位類型列輸入的值只要<2n,就可以表達為二進制、十進制、十六進制等(例如0b10011、63、0x41),但bit(n)查詢顯示輸出的是二進制值。第2章
數(shù)
據(jù)
類
型——字符串和二進制串型01字符串類型字符串描述字符集字符排序規(guī)則字符串類型1.字符串描述字符串數(shù)據(jù)類型如表。數(shù)據(jù)類型最多存放字符個數(shù)(字節(jié))char(n)255varchar(n)65535(2)tinytext255(1)text65535(2)mediumtext16777215(3)longtext4294967295(4)字符串類型說明:(1)char(n)和varchar(n)括號中的n代表字符的個數(shù),不是字節(jié)數(shù)。例如,采用UTF8字符集,存放n個純ASCII碼字符,占用n個字節(jié)。(2)實際上,tinytext、text、mediumtext、longtexttext類型就相當于varchar(n),n就是該類型最大可存放的字符個數(shù)。例如:text類型相當于varchar(65535)。(3)如果一個表中的任何列都有可變長度,結(jié)果會使整個行變長。如果一張表包含任何變長的列(varchar、text等),則所有大于3個字符的char列都將被改變?yōu)関archar列。(4)可變長度實際存儲空間除了字符本身外,還需要額外存儲當前字符占用的空間字節(jié)數(shù),而它本身占的字節(jié)為其數(shù)據(jù)類型最大字符數(shù)。例如:varchar(60000),當前值'abc',占用空間為3+2=5,前者是內(nèi)容占用,后者為長度占用,因為最大長度60000需要用2個字節(jié)才能存放。(5)字符串數(shù)據(jù)類型數(shù)據(jù)用單引號和雙引號括起,內(nèi)容可以是平臺字符,也可以是轉(zhuǎn)義字符。例如“\'”為單引號,“\n”為回車。字符串類型2.字符集ASCII碼及其字符集ASCII碼即美國標準信息交換碼,是目前世界上的計算機中使用最廣泛的西文字符集編碼。西文字符集由拉丁字母、數(shù)字、標點符號及一些特殊符號組成。在標準ASCII碼表中,20H~7EH部分屬于可打印字符,共95個。GB2312-80編碼及其字符集1981年,我國頒布信息交換漢字編碼的第一個國家標準,稱為GB2312-80。其字符集由以下3部分組成。(1)字母、數(shù)字和各種符號,包括拉丁字母、俄文、日文平假名與片假名、希臘字母、漢語拼音等,共682個。(2)一級常用漢字,共3755個,按漢語拼音排列。(3)二級常用漢字,共3008個,按偏旁部首排列。GB2312-80字符集構(gòu)成一個二維碼表,它分成94行和94列,行號稱為區(qū)號,列號稱為位號,如圖。字符串類型GB2312-80字符集的每個漢字或符號在碼表中都有各自的位置,即所在的區(qū)號及位號。用區(qū)號及位號組合在一起的編碼就是該漢字區(qū)位碼。例如,“中”字的區(qū)號是54,位號是48,區(qū)位碼是(54,48),用十六進制表示為(36H,30H)。為了與西文字符共存,漢字內(nèi)碼不能與ASCII碼沖突。因為ASCII碼用一個字節(jié)表示,最高位為0;漢字內(nèi)碼用2個字節(jié)表示,每個字節(jié)的最高位為1。如圖。字符串類型GBK編碼及其字符集GB2312編碼漢字太少,缺少繁體字,無法滿足人名、地名、古籍整理、古典文獻研究等應(yīng)用的需要。于是在1995年推出了“漢字內(nèi)碼擴充規(guī)范”,稱為GBK標準,它在GB2312的基礎(chǔ)上增加了大量的漢字(包括繁體字)和符號,共21003個漢字和883個圖形符號。GB2312中的字符仍然采用原來的編碼,僅僅對新增加的符號和漢字進行另外編碼。GBK漢字內(nèi)碼也使用雙字節(jié)表示,但僅第1字節(jié)最高位為“1”,如圖。字符串類型Unicode編碼及UTF8字符集Unicode只是字符集,卻沒有規(guī)定該如何存儲、傳輸,而UTF規(guī)定了字符如何傳輸和存儲。UTF又分為UTF-8、UTF-16和UTF-32,它們都可以完全表示Unicode標準中的所有字符,而UTF-8使用較多。UTF-8為單字節(jié)可變長編碼,它根據(jù)Huffman編碼的思想(最常出現(xiàn)的字符編碼盡量短),以及不同符號使用不同的字節(jié)長度表示,因此UTF-8采用了1~4個字節(jié)表示一個符號變長的編碼方式。從Unicode到UTF-8的編碼方式如表。Unicode編碼(十六進制)UTF-8字節(jié)流(二進制)字符000000-00007F0xxxxxxxASCII字符000080-0007FF110xxxxx10xxxxxx拉丁、希臘、阿拉伯……000800-00FFFF1110xxxx10xxxxxx10xxxxxx中、日、韓統(tǒng)一整理出來的稱為CJK漢字010000-10FFFF11110xxx10xxxxxx10xxxxxx10xxxxxx其他字符。字符串類型3.字符排序規(guī)則字符排序又稱字符序,MySQL中眾多的排序規(guī)則可以歸納為以下兩大類排序集:(1)字符集_語言/other_ci/cs這是默認的排序集,當字符無須區(qū)分大小寫時采用該集合中的規(guī)則,規(guī)則命名以其對應(yīng)的字符集作為前綴,例如:字符序utf8_general_ci,表明它是字符集utf8的字符序。ci對大小寫不敏感,而cs對大小寫敏感。utf8字符集對應(yīng)的collation沒有cs。(2)字符集_bin當字符需要區(qū)分大小寫時,選擇該排序集。每個字符集對應(yīng)一定數(shù)量的排序規(guī)則,可以指定數(shù)據(jù)集如何排序以及字符串的排序規(guī)則。MySQL提供了4個等級的默認字符集以及排序規(guī)則,分別是服務(wù)器、數(shù)據(jù)庫、表和列級別。02二進制串類型二進制數(shù)據(jù)類型大二進制數(shù)據(jù)類型二進制串類型1.二進制數(shù)據(jù)類型二進制數(shù)據(jù)類型包括binary和varbinary,它們類似于字符串類型char和varchar,但不同的是,它們存儲的不是字符串,而是二進制串。所以它們沒有字符集,并且排序和比較需要基于列字節(jié)的數(shù)值。二進制數(shù)據(jù)類型列可以保存數(shù)值,也可以保存字符串,均變成對應(yīng)的字節(jié)保存。而且經(jīng)常將聲音、圖像、視頻等文件用系統(tǒng)函數(shù)轉(zhuǎn)換成字節(jié)數(shù)據(jù)保存在其中。當保存binary值時,在它們右側(cè)填充0x00值以達到指定長度。取值時不刪除尾部的字節(jié)。二進制串類型2.大二進制數(shù)據(jù)類型大二進制數(shù)據(jù)類型為blob類型,是一個二進制對象,可以存儲數(shù)據(jù)量很大的二進制數(shù)據(jù),也可視為足夠大的varbinary列,可用于存儲大的圖片、視頻等。有4種blob類型:tinyblob、blob、mediumblob和longblob,它們可容納值的最大長度不同。tinyblob類型:最大長度為255(28-1)字節(jié)。blob類型:最大長度為65535(216-1)字節(jié)。mediumblob類型:最大長度為16777215(224-1)字節(jié)。longblob類型:最大長度為4294967295(232-1)字節(jié)。實際長度與編碼有關(guān),比如UTF8編碼,長度會減半。二進制串類型說明:(1)當保存或檢索blob和text列的值時不刪除尾部空格,這與varbinary和varchar列相同。(2)比較時將用空格對text進行擴充以適合比較的對象,正如char和varchar。(3)對于blob和text列的索引,必須指定索引前綴的長度。對于char和varchar,前綴長度是可選的。(4)blob和text列不能有默認值。(5)mysqlconnector/odbc將blob值定義為longvarbinary,將text值定義為longvarchar。(6)blob或text對象的最大值由其類型確定,但在客戶端和服務(wù)器之間實際可以傳遞的最大值由可用內(nèi)存數(shù)量和通信緩存區(qū)大小確定。(7)每個blob或text值分別由內(nèi)部分配的對象表示。第2章
數(shù)
據(jù)
類
型——日期時間型日期時間型1.日期類型日期類型包含datetime、date和timestamp類型,這3者都用來表示日期/時間。(1)datetime類型:以'yyyy-mm-ddhh:mm:ss'(年-月-日時:分:秒)格式檢索和顯示。支持的范圍為'1000-01-0100:00:00'~'9999-12-3123:59:59'。(2)date類型:用'yyyy-mm-dd'(年-月-日)格式檢索和顯示。支持的范圍為'1000-01-01'~'9999-12-31'。(3)timestamp類型:包含日期和時間,范圍為'1970-01-0100:00:01'utc~'2038-01-1903:14:07'utc。該類型能夠自動存儲記錄修改的時間。timestamp的顯示尺寸必須是偶數(shù)且在2~14范圍內(nèi)。如果指定0顯示尺寸或比14大,尺寸被強制設(shè)定為14。在1~13范圍內(nèi)的奇數(shù)值尺寸被強制設(shè)定為下一個更大的偶數(shù)。將它設(shè)為NULL,默認為當前的日期和時間??梢允褂萌魏纬R姼袷街付╠atetime、date和timestamp值。對于包括日期部分間隔符的字符串值,如果日和月的值都小于10,則不需要指定兩位數(shù),例如'1979-6-9'與'1979-06-09'相同。如果一個數(shù)值是8位或14位長,則假定為'yyyymmdd'或'yyyymmddhhmmss'格式,前4位數(shù)表示年。如果為一個datetime或timestamp對象分配一個date值,結(jié)果值的時間部分被設(shè)置為'00:00:00'。函數(shù)返回的結(jié)果,其值適合datetime、date或者timestamp上下文,如now()或current_date。日期時間型2.時間類型time值的范圍為'-838:59:59'~'838:59:59'。(1)可以用各種格式指定time值,如下。'dhh:mm:ss.fraction'格式的字符串。還可以用'hh:mm:ss.fraction'、'hh:mm:ss'、'hh:mm'、'dhh:mm:ss'、'dhh:mm'、'dhh'或'ss'。這里d表示日期,取值范圍為0~31。'hhmmss'格式的沒有間隔符的字符串,假定是有意義的時間。例如,'101112'被理解為'10:11:12'。hhmmss格式的數(shù)值,假定是有意義的時間。例如,101112被理解為'10:11:12'。(2)函數(shù)返回的結(jié)果,其值適合time上下文,如current_time。(3)對于指定為包括時間部分間隔符的字符串的time值,如果時、分或者秒值小于10,則不需要指定兩位數(shù)。例如,'8:3:2'與'08:03:02'相同。(4)如果time值沒有冒號,則最右側(cè)的兩位數(shù)表示秒,time值表示過去的時間而不是當天的時間。例如,'1112'和1112被解釋為'00:11:12'(11分12秒),'12'和12被解釋為'00:00:12'。相反,如果time值中使用冒號,則肯定被看作當天的時間。例如,'11:12'表示'11:12:00',而不是'00:11:12'。(5)無效time值被轉(zhuǎn)換為'00:00:00'。由于'00:00:00'本身是一個合法的time值,所以只從一個'00:00:00'值還不能判斷原來的值是'00:00:00'還是不合法的。日期時間型3.年類型年類型就是year類型,是一個單字節(jié)類型,用于表示年。MySQL以yyyy格式檢索和顯示year值,范圍為1901~2155。(1)可以指定各種格式的year值,如下。4位字符串:如'2018'。4位數(shù)字:如2018。2位字符串:'00'~69'轉(zhuǎn)換為2000~2069,'70'~'99'轉(zhuǎn)換為1970~1999。例如,'18'表示2018。一個字符串'0'或'00'可能被解釋為0000。2位整數(shù):范圍為1~99。1~69轉(zhuǎn)換為2001~2069,70~99轉(zhuǎn)換為1970~1999。不能直接將零指定為數(shù)字并將它解釋為2000。(2)函數(shù)返回的結(jié)果,其值適合year上下文,如now()。(3)非法year值被轉(zhuǎn)換為0000。第2章
數(shù)
據(jù)
類
型——枚舉、集合、鍵值和空間型01枚舉類型和集合類型枚舉類型:enum集合類型:set枚舉類型和集合類型1.枚舉類型:enum(1)定義enum('值1','值2','值3'...,'值n')定義需要enum需要設(shè)置成員表,成員為字符串(尾部空格將自動被刪除),即使成員是數(shù)字,也必須是加引號的字符串。成員之間用“,”分隔。enum類型創(chuàng)建時指定的成員就是枚舉值,每個枚舉值位置對應(yīng)一個索引編號,MySQL存儲的就是這個索引編號。(2)存儲enum類型存儲的不是成員的字符串,而是成員的索引編號,定義1~255個成員的枚舉索引編號需要1個字節(jié)存儲;對于256~65535個成員,索引編號需要2個字節(jié)存儲。例如,“專業(yè)”枚舉定義enum('計算機','通信工程','人工智能'),該列可以取的值和對應(yīng)的索引編號如表。成員索引編號NULLNULL“0'計算機'1'通信工程'2'人工智能'3枚舉類型和集合類型2.集合類型:set(1)定義SET('值1','值2','值3'...,'值n')set類型成員不能為空,最少需要一個成員,最多包含64個成員。實際內(nèi)容為這些成員構(gòu)成的組合,1~8個成員的集合占1個字節(jié),9~16個成員的集合占2個字節(jié),17~24個成員的集合占3個字節(jié),25~32個成員的集合占4個字節(jié),33~64個成員的集合占8個字節(jié)。(2)存儲set類型存儲的不是成員的字符串,而是其二進制位信息。例如:“興趣”集合定義set('唱歌','跳舞','智力游戲','足球運動','書法')。“興趣”成員和存儲值表示如表。成員二進制值十進制值'唱歌'11'跳舞'102'智力游戲'1004'足球運動'10008'書法'100001602鍵值(JSON)類型JSON對象JSON數(shù)組鍵值(JSON)類型1.JSON對象JSON類型的數(shù)據(jù)是以JSON對象的形式提供的,一個標準的JSON對象包含一組鍵值對,用逗號分隔,以“{”和“}”字符括起來:{"鍵1":"值1",...}創(chuàng)建JSON對象采用JSON_OBJECT系統(tǒng)函數(shù)格式如下:JSON_OBJECT(鍵1,值1,鍵2,值2,...)創(chuàng)建JSON對象和存儲遵循的規(guī)則基本如下:(1)鍵名(無論中英文)都必須以雙引號(")括起來。(2)鍵值是字符串型(無論中英文)必須加雙引號(")或單引號(')括起來。(3)鍵值是數(shù)值型(整數(shù)或?qū)崝?shù)類型),可以以數(shù)值或字符串兩種格式存儲。當以數(shù)值存儲時,直接寫出數(shù)值即可;而以字符串存儲時,鍵值需加雙引號或單引號。(4)鍵值是日期時間型,可以用兩種方式給出:一種是直接以字符串形式寫出;另一種是通過系統(tǒng)內(nèi)置的日期時間函數(shù)獲得。JSON對象構(gòu)建的數(shù)據(jù)如圖。鍵值(JSON)類型2.JSON數(shù)組當需要同時存儲很多JSON對象或者標量值時,可將它們集中在一起構(gòu)造出一個數(shù)組數(shù)據(jù)結(jié)構(gòu)來統(tǒng)一管理。JSON數(shù)組包含多個值,這些值由逗號分隔格式如下:JSON_ARRAY(值,...)JSON數(shù)組元素顯示包含在“[”和“]”中如下:[{鍵1":"值1",...},...]JSON數(shù)組構(gòu)建的數(shù)據(jù)如圖。03空
間
類
型單一空間類空間集合類空
間
類
型1.單一空間類(1)點類型:point(xy)存放一個坐標值,用空格分隔。例如:point(18206)。point(經(jīng)度,維度)存放一個地理位置。例如:point(121.81534239.224632)。(2)線類型:linestring(點,…)由一系列點連接而成,點與point格式一致。如果線從頭至尾沒有交叉,那就是簡單的;如果起點和終點重疊,那就是封閉的。例如:linestring(1025,1530,6840)。(3)多邊形類型:polygon(點,…)可以是一個實心平面形,即沒有內(nèi)部邊界,也可以有空洞,類似紐扣。最簡單的就是只有一個外邊界的情況。例如:polygon((010,1020),(2030,3010))。(4)geometry類型:它是單一空間類型的基類,point、linestring、polygon都是geometry的子類。例如:geometry(point(4010),linestring(1010,2020,1040),polygon((4040,2045,4530,4040))空間類型幾何圖形圖例如圖。空
間
類
型2.空間集合類multipoint、multilinestring、multipolygon、geometrycollection數(shù)據(jù)類型都是空間集合類,由多個point、linestring或polygon組合而成。(1)multipoint描述多個點。例如:multipoint(1040),(4030),(2020),(3010),或者multipoint(1040,4030,2020,3010)。(2)multilinestring描述多條線。例如:multilinestring((1010,2020,1040),(4040,3030,4020,3010))。(3)multipolygon描述多個多邊形。例如:multipolygon(((4040,2045,4530,4040)),((2035,1030,1010,305,4520,2035),(3020,2015,2025,3020)))。geometrycollection描述任何類型的對象的集合??臻g集合類型圖例如圖。第3章
數(shù)據(jù)庫和表——MySQL數(shù)據(jù)庫MySQL數(shù)據(jù)庫安裝
MySQL
系統(tǒng)時,就生成了系統(tǒng)使用的數(shù)據(jù)庫,包括information_schema、mysql和performance_schema等,MySQL把有關(guān)DBMS自身的管理信息都保存在這幾個數(shù)據(jù)庫中,如果刪除了它們,MySQL將無法正常工作,故請讀者操作時千萬留神!如果安裝時選擇安裝實例數(shù)據(jù)庫,則系統(tǒng)還有另外兩個實例數(shù)據(jù)庫sakila和world。通過以下命令可以查看MySQL已有的數(shù)據(jù)庫:SHOWDATABASES;命令執(zhí)行結(jié)果如圖。01創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫語句如下:CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]數(shù)據(jù)庫名[創(chuàng)建選項,...]其中,創(chuàng)建選項:[DEFAULT]CHARACTERSET字符集名|[DEFAULT]COLLATE校對規(guī)則名IFNOTEXISTS:在創(chuàng)建數(shù)據(jù)庫前須進行判斷,只有該數(shù)據(jù)庫目前尚不存在時才可執(zhí)行CREATEDATABASE操作。用此選項可以避免出現(xiàn)數(shù)據(jù)庫已經(jīng)存在卻再新建的錯誤。DEFAULT:指定默認值。CHARACTERSET:指定數(shù)據(jù)庫字符集。COLLATE:指定字符集的校對規(guī)則。說明:如果在MySQL環(huán)境下采用下列命令設(shè)置了字符集,每個數(shù)據(jù)庫創(chuàng)建時不需要單獨重新設(shè)置:SETCHARACTER_SET_DATABASE='gbk';SETCHARACTER_SET_SERVER='gbk';創(chuàng)建數(shù)據(jù)庫【例】創(chuàng)建test數(shù)據(jù)庫。CREATEDATABASEtest;說明:如果創(chuàng)建數(shù)據(jù)庫不指定選項就使用默認選項參數(shù)。如果已經(jīng)創(chuàng)建了名為test的數(shù)據(jù)庫,重復(fù)創(chuàng)建時系統(tǒng)將會提示數(shù)據(jù)庫已經(jīng)存在的錯誤信息,不能再創(chuàng)建。使用IFNOTEXISTS子句可不顯示錯誤信息:CREATEDATABASEIFNOTEXISTStest;SHOWDATABASES; #顯示的數(shù)據(jù)庫中多了test02修改數(shù)據(jù)庫修改數(shù)據(jù)庫修改數(shù)據(jù)庫語句如下:ALTER{DATABASE|SCHEMA}[數(shù)據(jù)庫名]修改選項[,修改選項]...其中,修改選項:[DEFAULT]CHARACTERSET字符集名|[DEFAULT]COLLATE校對規(guī)則名說明:ALTERDATABASE用于更改數(shù)據(jù)庫的全局特性,這些特性儲存在數(shù)據(jù)庫目錄中的db.opt文件中。用戶必須有對數(shù)據(jù)庫進行修改的權(quán)限,才可使用ALTERDATABASE。修改數(shù)據(jù)庫的選項與創(chuàng)建數(shù)據(jù)庫的相同,功能不再重復(fù)說明。如果語句中將數(shù)據(jù)庫名稱忽略,則修改當前(默認)數(shù)據(jù)庫?!纠啃薷臄?shù)據(jù)庫test的默認字符集和校對規(guī)則。ALTERDATABASEtestDEFAULTCHARACTERSETgb2312DEFAULTCOLLATEgb2312_chinese_ci;03刪除數(shù)據(jù)庫刪除數(shù)據(jù)庫刪除數(shù)據(jù)庫語句如下:DROPDATABASE[IFEXISTS]數(shù)據(jù)庫名使用IFEXISTS子句,可避免刪除不存在的數(shù)據(jù)庫時出現(xiàn)MySQL錯誤信息。例如,刪除test數(shù)據(jù)庫:DROPDATABASEtest;SHOWDATABASES; #顯示數(shù)據(jù)庫中沒有test04打開和關(guān)閉數(shù)據(jù)庫打開和關(guān)閉數(shù)據(jù)庫數(shù)據(jù)庫創(chuàng)建后,在同一個會話中就自動打開。下列語句打開指定數(shù)據(jù)庫,使其成為當前數(shù)據(jù)庫:USE數(shù)據(jù)庫名關(guān)閉數(shù)據(jù)庫,其后會話就沒有當前數(shù)據(jù)庫了。第3章
數(shù)據(jù)庫和表——MySQL表01創(chuàng)
建
表列定義及基本屬性列鍵屬性列其他屬性列數(shù)據(jù)類型虛擬列(生成列)由原有的表創(chuàng)建新表創(chuàng)
建
表創(chuàng)建表語句如下:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]表名(列定義,...[表索引][完整性約束])[表選項]說明:TEMPORARY:包含此關(guān)鍵字表示新建的表為臨時表,否則創(chuàng)建的表通常稱為持久表。IFNOTEXISTS:在創(chuàng)建表前加上一個判斷,只有該表目前尚不存在時才創(chuàng)建。列定義:列又稱字段。列定義包括列名、數(shù)據(jù)類型和寬度等,還可包含是否允許空值和完整性約束。表索引:UNIQUEKEY(...)|PRIMARYKEY(...)|INDEX(...):第1項指定部分列(或單列)值的唯一性,第2項列作為主鍵,第3項列創(chuàng)建索引。完整性約束:CHECK、FOREIGNKEY(…):前者定義部分列(或單列)值數(shù)據(jù)完整性,后者定義本表與參考表的記錄完整性。表選項:指定表的屬性。創(chuàng)
建
表1.列定義及基本屬性列按照下列形式定義:列名數(shù)據(jù)類型[(長度和小數(shù))][空值][鍵][字符集][列其他屬性][注釋]其中:列名:必須符合標識符規(guī)則,長度不能超過64個字符,而且在表中要唯一。如果有MySQL保留字則必須用單引號括起來。數(shù)據(jù)類型[(長度和小數(shù))]:列保存數(shù)據(jù)類型。整數(shù)型、實數(shù)型和字符串型需要指定長度,實數(shù)型還需要指定小數(shù)位??罩担篘OTNULL|NULL:指定該列是否允許為空,前者為不允許為空,后者為可以為空。如果不指定,則默認為NULL。字符集:如果列數(shù)據(jù)類型為字符串型,可以指定存儲字符的字符集和校對規(guī)則:CHARACTERSET字符集名COLLATE校對規(guī)則名注釋:COMMENT'注釋內(nèi)容',列的描述內(nèi)容,說明列的作用。創(chuàng)
建
表2.列鍵屬性列鍵屬性如下:PRIMARYKEY:列設(shè)置為主鍵。一個表只能定義一個主鍵,主鍵一定要為NOTNULL。UNIQUE:列設(shè)置為唯一鍵。將確保所有值都有不同的值,只有NULL值可以重復(fù)。一個表可以設(shè)置多個列為唯一鍵。創(chuàng)
建
表3.列其他屬性列還可以指定下列屬性:AUTO_INCREMENT:設(shè)置自增屬性,只有數(shù)據(jù)類型為整型的列才能設(shè)置此屬性。當插入NULL值或0,將列原來值增1,順序從1開始。每個表只能有一個AUTO_INCREMENT列,并且必須能被索引。DEFAULT:指定列默認值,默認值必須為一個常數(shù)。其中,BLOB和TEXT類型列不能被賦予默認值。UNSIGNED:對于整數(shù)類型,指定為無符號整數(shù)。ZEROFILL:可用于任何數(shù)值類型,用0填充所有剩余列空間。例如,無符號INT的默認寬度是10,因此,當值為4時,將它表示為0000000004。IDENTITY:包含系統(tǒng)所生成序號值的一個標識列,該序號值唯一標識表中的一列,可以作為鍵值。每個表只能有一個列被設(shè)置為標識屬性,該列數(shù)據(jù)類型只能是整型。定義標識屬性時,可指定其種子(起始)值、增量值,二者的默認值均為1。系統(tǒng)自動更新標識列值。例如:idintNOTNULLIDENTITYidintNOTNULLIDENTITY(1,1)創(chuàng)
建
表4.列數(shù)據(jù)類型列數(shù)據(jù)類型按照下列形式描述:整數(shù)類型名[(長度)][UNSIGNED][ZEROFILL]實數(shù)類型名[(長度.小數(shù)位)][UNSIGNED][ZEROFILL]大數(shù)據(jù)類型名字符串類型名(長度)[BINARY|ASCII|UNICODE]文本類型名[BINARY]日期時間類型名空間類型名位類型:bit[n]枚舉類型:enum(值,...)集合類型:set(值,...)鍵值類型:json其中,具體類型名如下:整數(shù)類型名:tinyint|smallint|mediumint|int|integer|bigint實數(shù)類型名:real|double|decimal|numeric大數(shù)據(jù)類型名:tinyblob|blob|mediumblob|longblob字符串類型名:char|varchar|tinytext|text|mediumtext|longtext日期時間類型名:date|time|datetime|timestamp|year創(chuàng)
建
表5.虛擬列(生成列)虛擬列又稱生成列,按照下列形式描述:列名數(shù)據(jù)類型GENERATEDALWAYSAS(列生成表達式)照表達式計算的值同步變化。【例】在xscj數(shù)據(jù)庫中創(chuàng)建一個學(xué)生表,表名為xs。輸入以下命令:CREATEDATABASExscj;USExscj;CREATETABLExs(學(xué)號 char(6) NOTNULLPRIMARYKEY,姓名 char(4) NOTNULL,專業(yè) char(10) NULL,性別 tinyint(1) NOTNULLDEFAULT1,出生日期 date NOTNULL,總學(xué)分 tinyint(1) NULL,備注 text NULL,照片 blob NULL);創(chuàng)
建
表說明:(1)PRIMARYKEY:表示將“學(xué)號”列定義為主鍵。(2)DEFAULT1:表示“性別”的默認值為1。實際上,性別如果僅保存2種狀態(tài),可以定義為bit(1)。已經(jīng)創(chuàng)建的表可以使用以下命令顯示表結(jié)構(gòu):DESCRIBE表名;例如:USExscj; #打開xscj數(shù)據(jù)庫SHOWTABLES; #顯示xscj數(shù)據(jù)庫中包含的表DESCRIBExs; #顯示xs表結(jié)構(gòu)創(chuàng)
建
表6.由原有的表創(chuàng)建新表除了全新創(chuàng)建,用戶也可以直接復(fù)制數(shù)據(jù)庫中原有表的結(jié)構(gòu)和數(shù)據(jù),用這種方式十分方便、快捷。由原有的表創(chuàng)建新表語句如下:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]表名[LIKE源表名]|[AS(SELECT語句)];說明:(1)使用LIKE關(guān)鍵字創(chuàng)建一個與“源表”相同結(jié)構(gòu)的新表,源表的列名、數(shù)據(jù)類型、是否空值、主鍵、默認值、索引、約束、分區(qū)等都將被復(fù)制,但是源表的記錄不會復(fù)制,因此創(chuàng)建的新表是一個空表。(2)使用AS關(guān)鍵字可以復(fù)制SELECT語句查詢的結(jié)果表,但源表的一些屬性(如主鍵、生成列等)卻不會被復(fù)制。創(chuàng)
建
表【例】在xscj數(shù)據(jù)庫中,復(fù)制xs表創(chuàng)建表名為xs1的表;再創(chuàng)建一個名為xs2的表,包含xs表的部分指定列。打開xscj數(shù)據(jù)庫:USExscj;CREATETABLExs1LIKExs; #復(fù)制xs表創(chuàng)建xs1表結(jié)構(gòu)CREATETABLExs2AS(SELECT學(xué)號,姓名,專業(yè),總學(xué)分FROMxs); #復(fù)制xs表部分列創(chuàng)建xs2表
SHOWTABLES; #(a)DESCRIBExs2; #(b)顯示結(jié)果如圖。
02修
改
表增加修改刪除列增加刪除列、索引和完整性約束修改表選項修
改
表ALTERTABLE用于修改原有表的結(jié)構(gòu)。例如,可以增加(刪減)列、創(chuàng)建(取消)索引、更改原有列的類型、重命名列或表,還可以更改表的注釋和表的類型。修改表語句如下:ALTER[IGNORE]TABLE表名[ADD列定義] /*增加列*/[DROP列名] /*刪除列*/[MODIFY列名列屬性] /*修改列屬性*/[ALTER列名SETDEFAULT值|DROPDEFAULT] /*設(shè)置默認值和刪除默認值*/[RENAME表名 /*表更名*/[CHANGE原列名新列定義修改...] /*修改列名同時修改列屬性*/[ADD主鍵|索引|完整性約束] /*增加表索引和完整性約束*/[DROP列名|索引名|主鍵|完整性約束名] /*刪除表列、索引、主鍵和完整性約束*/[ORDERBY列名,...] /*列排序*/[表選項] /*增加修改表屬性*/修
改
表1.增加修改刪除列下面介紹增加修改刪除列描述形式。(1)增加列ADD[COLUMN]列定義[FIRST|AFTER列名]列定義參考CREATETABLE語句。FIRST:指定增加列為第1列。AFTER列名:增加在指定列后面。(2)修改和刪除指定列的默認值A(chǔ)LTER[COLUMN]SETDEFAULT值|DROPDEFAULT(3)修改列的名稱和定義CHANGE舊列名列定義[FIRST|AFTER列名](4)修改列屬性MODIFY[COLUMN]列名列屬性(5)刪除列DROP列名修
改
表【例】修改xs2表結(jié)構(gòu)。USExscj;ALTERTABLExs2 ADDCOLUMN考評tinyintNULL;ALTERTABLExs2 CHANGE考評考評分tinyint;ALTERTABLExs2 DROP考評分;ALTERTABLExs2 MODIFY專業(yè)char(12)NOTNULL;DESCRIBExs2;說明:第1句:在xs2表中增加新的一列“考評”。第2句:把xs2表“考評”列名變更為“考評分”。第3句:把xs2表的“考評分”列刪除。第4名:把xs2表“專業(yè)”列數(shù)據(jù)類型改為char(12)。(6)指定記錄排序列ORDERBY列名,...用于在創(chuàng)建新表時,讓各行(記錄)按一定的順序排列。修
改
表2.增加刪除列、索引和完整性約束下面介紹增加刪除列、列索引和完整性約束的描述形式。(1)增加列、列索引和完整性約束ADD{INDEX|KEY}索引名索引定義|ADDPRIMARYKEY主鍵定義|ADDUNIQUE唯一性鍵名唯一性定義|ADDFOREIGNKEY外鍵名外鍵定義|ADDCHECK(完整性約束條件)【例】在xscj數(shù)據(jù)庫的xs2表中,增加主鍵和生成列(專業(yè)編號)。USExscj;ALTERTABLExs2 ADD專業(yè)編號char(2)GENERATEDALWAYSAS(SUBSTRING(學(xué)號,3,2)), ADDPRIMARYKEY(學(xué)號);DESCRIBExs2;修
改
表說明:①xs2表采用“CREATE…ASSELECT…”方式創(chuàng)建,雖然原xs表包含“學(xué)號”列主鍵,但xs2表沒有主鍵。這里給xs2表增加“學(xué)號”列主鍵。②“專業(yè)編號”列為char(2)數(shù)據(jù)類型,它由學(xué)號列的第3、4位生成,是虛擬的列。執(zhí)行后,xs2表的結(jié)構(gòu)如圖。修
改
表(2)刪除列、列索引、主鍵和完整性約束DROP[COLUMN]列名|DROP{INDEX|KEY}索引名|DROPPRIMARYKEY|DROPFOREIGNKEY外鍵約束名|CHECK完整性約束名(3)修改表索引名和表名RENAME{INDEX|KEY}原索引名TO新索引名3.修改表選項具體定義與CREATETABLE語句一樣。03表刪除和更名更改表名表刪除表刪除和更名1.更改表名除了上面的ALTERTABLE命令用“RENAME新表名”修改表名,還可以直接用下列語句來更改表的名字。RENAMETABLE
原表名TO新表名,...2.表刪除當需要刪除一個表時可以使用下列語句。DROP[TEMPORARY]TABLE[IFEXISTS]表名,...說明:這個命令將表的描述、完整性約束、索引及與表相關(guān)的權(quán)限等一并刪除。第3章
數(shù)據(jù)庫和表——表記錄的操作01插
入
記
錄插入新記錄插入圖片用已有表記錄插入當前表記錄替換舊記錄系統(tǒng)模式插入記錄1.插入新記錄向表中插入全新的記錄用下列語句。INSERT[選項][INTO]表名[(列名,...)]VALUES({表達式|DEFAULT},...),...或者INSERT[選項][INTO]表名[(列名,...)]|SET列名={表達式|DEFAULT},...[ONDUPLICATEKEYUPDATE列名=表達式,...]插入記錄說明:(1)INTO子句:如果只給表的部分列插入數(shù)據(jù),需要指定這些列。若沒有指定列,表示對所有列插入數(shù)據(jù),值的順序與表結(jié)構(gòu)定義的順序相同。(2)
VALUES子句:包含各列需要插入的數(shù)據(jù)清單,數(shù)據(jù)的順序要與列的順序相對應(yīng)。若表名后不給出列名,則要在VALUES子句中給出每一列(除IDENTITY和timestamp類型的列)的值,如果列值為空,則值必須為NULL,否則會出錯。(3)
選項:LOW_PRIORITY:可以使用在INSERT、DELETE和UPDATE等操作中,當原有客戶端正在讀取數(shù)據(jù)時,延遲操作的執(zhí)行,直到?jīng)]有其他客戶端從表中讀取數(shù)據(jù)為止。DELAYED:若使用此關(guān)鍵字,則服務(wù)器會把待插入的行放到一個緩沖器中,而發(fā)送INSERTDELAYED語句的客戶端會繼續(xù)運行。HIGH_PRIORITY:可以使用在SELECT和INSERT操作中,使操作優(yōu)先執(zhí)行。IGNORE:使用此關(guān)鍵字,在執(zhí)行語句時出現(xiàn)的錯誤就會被當作警告處理。ONDUPLICATEKEYUPDATE…:使用此選項插入行后,若導(dǎo)致UNIQUEKEY或PRIMARYKEY出現(xiàn)重復(fù)值,則根據(jù)UPDATE后的語句修改舊行(使用此選項時DELAYED被忽略)。(4)
SET子句:SET子句用于給列指定值,使用SET子句時表名的后面省略列名。要插入數(shù)據(jù)的列名在SET子句中指定,列名等號后面為指定數(shù)據(jù),未指定的列,其值為默認值。插入記錄【例】向xscj數(shù)據(jù)庫的xs表(表中列包括學(xué)號、姓名、專業(yè)、性別、出生日期、總學(xué)分、照片、備注)中插入如下一行記錄:221101,王林,計算機,1,2004-02-10,15使用下列語句插入記錄:USExscj;INSERTINTOxsVALUES('221101','王林','計算機',1,'2004-02-10',15,NULL,NULL);若xs表中性別采用默認值,照片和備注為NULL,插入記錄:INSERTINTOxs(學(xué)號,姓名,專業(yè),出生日期,總學(xué)分)VALUES('221104','韋嚴平','計算機','2004-08-26',12);使用SET子句插入記錄:INSERTINTOxsSET學(xué)號='221201',姓名='劉華',專業(yè)='通信工程',性別=DEFAULT,出生日期='2004-06-10',
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 成都紡織課程設(shè)計比賽
- ug課程設(shè)計結(jié)課
- 少兒書法教學(xué) 課程設(shè)計
- 故宮教育課程設(shè)計
- 山東經(jīng)貿(mào)職業(yè)學(xué)院《移動通信B》2023-2024學(xué)年第一學(xué)期期末試卷
- 整體的足球培訓(xùn)課程設(shè)計
- 家具工藝課程設(shè)計
- 小班拓印樹葉課程設(shè)計
- 戰(zhàn)爭課程設(shè)計圖表
- 日系妝容課程設(shè)計
- 常壓矩形容器設(shè)計計算軟件
- 交流變換為直流的穩(wěn)定電源設(shè)計方案
- PR6C系列數(shù)控液壓板料折彎機 使用說明書
- 鋼結(jié)構(gòu)工程環(huán)境保護和文明施工措施
- 物業(yè)管理業(yè)主意見征詢表
- 中藥分類大全
- 精文減會經(jīng)驗交流材料
- 管道定額價目表
- 民國文獻《潮州茶經(jīng)》
- 220千伏線路工程深基坑開挖方案(實施版)
- 真崎航の21部
評論
0/150
提交評論