版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫原理與應(yīng)用快速入門課程基本信息上課時(shí)間:1-11周周一下午7-8節(jié)
、周三上午1-2節(jié)上課地點(diǎn):信息中心204(周一)
信息副樓704(周三)學(xué)時(shí):44學(xué)分:3考核方式:平時(shí)成績+期末考試(閉卷筆試+機(jī)試)教師聯(lián)系方式:
李俊老師134206865851.1認(rèn)識數(shù)據(jù)庫基本概念1.2了解學(xué)習(xí)數(shù)據(jù)庫技術(shù)的意義1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境1.4安裝和配置MySQL數(shù)據(jù)庫第1章
認(rèn)識和安裝數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫1.6安裝MySQL圖形化工具1.1認(rèn)識數(shù)據(jù)庫基本概念什么是數(shù)據(jù)?在信息世界里,數(shù)據(jù)不僅包括傳統(tǒng)意義上的數(shù)字,還包括文字、符號、圖形圖像、音頻視頻等。什么是數(shù)據(jù)庫?簡單地說,就是存放數(shù)據(jù)的倉庫。數(shù)據(jù)庫在磁盤上占據(jù)一定的空間,大多數(shù)據(jù)情況下表現(xiàn)為若干個(gè)文件。短視頻:/video/BV1mY411V7HW/?spm_id_from=333.337.search-card.all.click&vd_source=01beb93115216fface51aeb0076c93891.1認(rèn)識數(shù)據(jù)庫基本概念應(yīng)用案例企業(yè)管理系統(tǒng)銀行存款和轉(zhuǎn)賬系統(tǒng)購書網(wǎng)站交友網(wǎng)站圖書館借閱系統(tǒng)財(cái)務(wù)管理系統(tǒng)1.1認(rèn)識數(shù)據(jù)庫基本概念計(jì)算機(jī)中的數(shù)據(jù)需要軟件系統(tǒng)來操縱和管理。我們將負(fù)責(zé)組織和管理數(shù)據(jù)庫的軟件系統(tǒng)稱作數(shù)據(jù)庫管理系統(tǒng)。數(shù)據(jù)庫技術(shù):關(guān)系型數(shù)據(jù)庫:1980至2010霸主
結(jié)構(gòu)統(tǒng)一非關(guān)系型數(shù)據(jù)庫:大數(shù)據(jù)技術(shù)
非結(jié)構(gòu)化
半結(jié)構(gòu)化1.1認(rèn)識數(shù)據(jù)庫基本概念主流的數(shù)據(jù)庫產(chǎn)品Oracle公司的OracleOracle公司的MySQLSun微軟公司的SQLServer以加州大學(xué)伯克利分校的POSTGRES項(xiàng)目為基礎(chǔ)的PostgreSQLMongoDB、Redis等新興的NoSQL數(shù)據(jù)庫管理系統(tǒng)1.1認(rèn)識數(shù)據(jù)庫基本概念圖1全球最受歡迎的十大數(shù)據(jù)庫管理系統(tǒng)謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門1.1認(rèn)識數(shù)據(jù)庫基本概念1.2了解學(xué)習(xí)數(shù)據(jù)庫技術(shù)的意義1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境1.4安裝和配置MySQL數(shù)據(jù)庫第1章認(rèn)識和安裝數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫1.6安裝MySQL圖形化工具1.2了解學(xué)習(xí)數(shù)據(jù)庫技術(shù)的意義學(xué)習(xí)數(shù)據(jù)庫技術(shù)有助于深入理解各種應(yīng)用系統(tǒng),以使自己在工作中有更出色的表現(xiàn)。在工作中使用數(shù)據(jù)庫,有助于提高工作效率。學(xué)好數(shù)據(jù)庫,可以為學(xué)習(xí)應(yīng)用系統(tǒng)開發(fā)打好基礎(chǔ)。謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門1.1認(rèn)識數(shù)據(jù)庫基本概念1.2了解學(xué)習(xí)數(shù)據(jù)庫技術(shù)的意義1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境1.4安裝和配置MySQL數(shù)據(jù)庫第1章
認(rèn)識和安裝數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫1.6安裝MySQL圖形化工具1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境學(xué)習(xí)內(nèi)容:(1)數(shù)據(jù)庫基本概念,包括表、記錄、字段、關(guān)系模型、鍵、聯(lián)系、約束等。(2)結(jié)構(gòu)化查詢語言SQL,包括數(shù)據(jù)查詢、數(shù)據(jù)庫操縱等。(3)常用數(shù)據(jù)庫對象,包括視圖、存儲(chǔ)過程、觸發(fā)器和常用系統(tǒng)函數(shù)等。(4)事務(wù)管理。(5)用戶和權(quán)限管理。(6)數(shù)據(jù)庫備份和恢復(fù)方法。(7)數(shù)據(jù)庫設(shè)計(jì)基本方法。1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境實(shí)驗(yàn)環(huán)境:本課程使用MySQL數(shù)據(jù)庫管理系統(tǒng)作為學(xué)習(xí)和練習(xí)的平臺(tái)。MySQL作為開源數(shù)據(jù)庫管理系統(tǒng),因其配置簡單、穩(wěn)定性強(qiáng)、性能優(yōu)良的特點(diǎn),在中小型應(yīng)用系統(tǒng)中廣受歡迎。本課程中安排了大量的上機(jī)實(shí)踐,讀者可以使用MySQL8.0邊學(xué)習(xí)邊實(shí)踐。謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門1.1認(rèn)識數(shù)據(jù)庫基本概念1.2了解學(xué)習(xí)數(shù)據(jù)庫技術(shù)的意義1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境1.4安裝和配置MySQL數(shù)據(jù)庫第1章
認(rèn)識和安裝數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫1.6安裝MySQL圖形化工具1.4.1安裝MySQL數(shù)據(jù)庫1.4.2配置MySQL數(shù)據(jù)庫1.4安裝和配置MySQL數(shù)據(jù)庫1.4安裝和配置MySQL數(shù)據(jù)庫了解MySQL的版本:企業(yè)版(MySQLEnterpriseEdition),需要付費(fèi)使用,該版本包括了更完備的功能和技術(shù)支持。社區(qū)版(MySQLCommunityServer),是開源免費(fèi)的,也就是我們通常使用的MySQL版本。集群版(MySQLCluster),可將幾個(gè)MySQLServer封裝成一個(gè)Server,是開源免費(fèi)的。高級集群版(MySQLClusterCGE),需要付費(fèi)使用。1.4安裝和配置MySQL數(shù)據(jù)庫MySQL可以在多平臺(tái)上進(jìn)行安裝,包括Windows平臺(tái)、Linux平臺(tái)、MacOS平臺(tái)等。本課程講解在Windows平臺(tái)安裝MySQL8.0社區(qū)版的過程。1.4安裝和配置MySQL數(shù)據(jù)庫圖1MySQL下載頁面1.4安裝和配置MySQL數(shù)據(jù)庫圖2ChoosingaSetupType窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖3CheckingRequirements窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖4Installation窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖5Installation窗口安裝完成1.4安裝和配置MySQL數(shù)據(jù)庫圖6TypeandNetworking窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖7AuthenticationMethod窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖8AccountsandRoles窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖9WindowsService窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖10ApplyConfiguration窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖11ApplyConfiguration窗口設(shè)置保存完成1.4安裝和配置MySQL數(shù)據(jù)庫圖12ProductConfiguration窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖13ConnecttoServer窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖14ApplyConfiguration窗口1.4安裝和配置MySQL數(shù)據(jù)庫圖15ApplyConfiguration窗口完成配置1.4安裝和配置MySQL數(shù)據(jù)庫圖16InstallationComplete窗口謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門1.1認(rèn)識數(shù)據(jù)庫基本概念1.2了解學(xué)習(xí)數(shù)據(jù)庫技術(shù)的意義1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境1.4安裝和配置MySQL數(shù)據(jù)庫第1章
認(rèn)識和安裝數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫1.6安裝MySQL圖形化工具1.5.1啟動(dòng)MySQL服務(wù)1.5.2登錄MySQL數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫1.5.3配置Path變量1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫MySQL安裝和配置完成后,需要啟動(dòng)MySQL服務(wù),客戶端才能登錄到數(shù)據(jù)庫。Windows系統(tǒng)中有兩種啟動(dòng)服務(wù)的方法,包括圖形化方式和命令行方式。1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫圖形化方式的操作方法為,打開計(jì)算機(jī)管理窗口,選擇“服務(wù)”,找到名為“MySQL80”的服務(wù)。如果該服務(wù)的狀態(tài)為“已啟動(dòng)”,表示數(shù)據(jù)庫可以正常登錄,如圖1所示。選中MySQL80服務(wù),單擊鼠標(biāo)右鍵,可對其進(jìn)行“啟動(dòng)”、“停止”、“暫?!焙汀爸匦聠?dòng)”。圖1MySQL80服務(wù)1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫命令行方式的操作方法為,右鍵單擊開始菜單,在運(yùn)行中輸入“cmd”,打開命令提示符窗口。啟動(dòng)MySQL服務(wù)的命令為:
netstartMySQL服務(wù)名圖2啟動(dòng)MySQL服務(wù)1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫與之對應(yīng),停止MySQL服務(wù)的命令為:
netstopMySQL服務(wù)名圖3停止MySQL服務(wù)1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫MySQL服務(wù)啟動(dòng)之后,在windows系統(tǒng)下可以通過DOS窗口登錄到MySQL數(shù)據(jù)庫。操作方法為:1.右鍵單擊開始菜單,在運(yùn)行中輸入“cmd”,打開命令提示符窗口。2.輸入以下命令,切換到MySQL安裝路徑的bin目錄下:cdC:\ProgramFiles\MySQL\MySQLServer8.0\bin3.輸入以下格式的命令,登錄到MySQL數(shù)據(jù)庫:mysql-hhostname-uusername-p1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫圖4登錄到MySQL數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫在登錄MySQL數(shù)據(jù)庫時(shí),需要首先切換到MySQL安裝路徑的bin目錄下,再執(zhí)行登錄命令。如果每次登錄都要這要操作,顯得有些繁瑣??梢詫ySQL的bin目錄添加到windows系統(tǒng)的環(huán)境變量中,這樣以后可以直接執(zhí)行登錄命令,簡化操作。1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫圖5“系統(tǒng)屬性”對話框1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫圖6“環(huán)境變量”對話框1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫圖7“編輯環(huán)境變量”對話框1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫圖8直接登錄MySQL數(shù)據(jù)庫謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門1.1認(rèn)識數(shù)據(jù)庫基本概念1.2了解學(xué)習(xí)數(shù)據(jù)庫技術(shù)的意義1.3了解學(xué)習(xí)內(nèi)容和實(shí)驗(yàn)環(huán)境1.4安裝和配置MySQL數(shù)據(jù)庫第1章
認(rèn)識和安裝數(shù)據(jù)庫1.5啟動(dòng)和登錄MySQL數(shù)據(jù)庫1.6安裝MySQL圖形化工具1.6安裝MySQL圖形化工具M(jìn)ySQL采用命令行方式對數(shù)據(jù)庫進(jìn)行操作和管理,需要使用很多命令。為了方便用戶使用,MySQL也支持使用圖形管理工具,通過鼠標(biāo)和鍵盤來操作數(shù)據(jù)庫。MySQL圖形管理工具有很多,包括MySQL官方提供的MySQLWorkbench,第三方工具Navicat、SQLyog等。其中,NavicatforMySQL是一款強(qiáng)大的MySQL數(shù)據(jù)庫管理和開發(fā)工具,它為專業(yè)開發(fā)者提供了一套強(qiáng)大且足夠尖端的工具,但對于新用戶仍然易于學(xué)習(xí)。本書介紹NavicatforMySQL的安裝和使用方法。1.6安裝MySQL圖形化工具讀者可登錄Navicat官網(wǎng)(/),在產(chǎn)品列表中找到NavicatforMySQL進(jìn)行下載。圖1Navicat安裝界面1.6安裝MySQL圖形化工具圖2許可證界面1.6安裝MySQL圖形化工具圖3選擇安裝文件夾界面1.6安裝MySQL圖形化工具圖4選擇開始目錄界面1.6安裝MySQL圖形化工具圖5選擇額外任務(wù)界面1.6安裝MySQL圖形化工具圖6準(zhǔn)備安裝界面1.6安裝MySQL圖形化工具圖7Navicat安裝完成界面1.6安裝MySQL圖形化工具安裝完成后,打開Navicat,在界面左上角的“連接”中選擇MySQL。圖8連接MySQL1.6安裝MySQL圖形化工具進(jìn)入“新建連接”對話框,輸入連接名和root賬戶的登錄密碼??牲c(diǎn)擊“測試連接”按鈕,測試連接是否成功。圖9新建連接對話框圖10連接成功1.6安裝MySQL圖形化工具進(jìn)入NavicatforMySQL主界面。圖11NavicatforMySQL主界面謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門2.1創(chuàng)建數(shù)據(jù)庫2.2創(chuàng)建數(shù)據(jù)表2.3關(guān)于數(shù)據(jù)庫引擎第2章
創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表2.1.1了解系統(tǒng)默認(rèn)數(shù)據(jù)庫2.1.2創(chuàng)建用戶數(shù)據(jù)庫2.1創(chuàng)建數(shù)據(jù)庫2.1.1了解系統(tǒng)默認(rèn)數(shù)據(jù)庫要保存數(shù)據(jù),首先需要將數(shù)據(jù)庫建立起來,就像要存放圖書,首先要搭建書庫一樣。從物理上看,通常一個(gè)數(shù)據(jù)庫對應(yīng)磁盤系統(tǒng)上的若干個(gè)文件。MySQL安裝完成后,系統(tǒng)中已經(jīng)存在了幾個(gè)默認(rèn)數(shù)據(jù)庫,可以使用以下命令進(jìn)行查看:
SHOWDATABASES;2.1.1了解系統(tǒng)默認(rèn)數(shù)據(jù)庫information_schema是一個(gè)信息數(shù)據(jù)庫,它保存著關(guān)于MySQL服務(wù)器所維護(hù)的所有其他數(shù)據(jù)庫的信息。information_schema數(shù)據(jù)庫提供了訪問數(shù)據(jù)庫元數(shù)據(jù)的方式。元數(shù)據(jù)是關(guān)于數(shù)據(jù)的數(shù)據(jù),如數(shù)據(jù)庫名或表名、列的數(shù)據(jù)類型、訪問權(quán)限等。mysql數(shù)據(jù)庫主要負(fù)責(zé)存儲(chǔ)數(shù)據(jù)庫的用戶、權(quán)限設(shè)置、關(guān)鍵字等MySQL自己需要使用的控制和管理信息。2.1.1了解系統(tǒng)默認(rèn)數(shù)據(jù)庫performance_schema數(shù)據(jù)庫主要用于收集數(shù)據(jù)庫服務(wù)器性能參數(shù)信息。sys數(shù)據(jù)庫所有的數(shù)據(jù)源來自performance_schema數(shù)據(jù)庫,其目標(biāo)是把performance_schema的復(fù)雜度降低,讓數(shù)據(jù)庫管理員能更好地閱讀這個(gè)數(shù)據(jù)庫里的內(nèi)容,以便更快了解數(shù)據(jù)庫的運(yùn)行情況。
2.1.1了解系統(tǒng)默認(rèn)數(shù)據(jù)庫sakila數(shù)據(jù)庫是一個(gè)樣例數(shù)據(jù)庫,包含23張數(shù)據(jù)表,是MySQL官方提供的學(xué)習(xí)MySQL的素材。world數(shù)據(jù)庫也是一個(gè)樣例數(shù)據(jù)庫,包含3張數(shù)據(jù)表。2.1.2創(chuàng)建用戶數(shù)據(jù)庫如果用戶需要?jiǎng)?chuàng)建新的數(shù)據(jù)庫以保存自己的應(yīng)用數(shù)據(jù),可使用以下格式的命令:
CREATEDATABASE數(shù)據(jù)庫名;其中,數(shù)據(jù)庫名是要?jiǎng)?chuàng)建的用戶數(shù)據(jù)庫的名稱,注意該名稱不能與系統(tǒng)中已經(jīng)存在的數(shù)據(jù)庫同名。2.1.2創(chuàng)建用戶數(shù)據(jù)庫【例2-1】創(chuàng)建一個(gè)用于學(xué)生管理的數(shù)據(jù)庫student。操作命令如下,執(zhí)行結(jié)果如圖1所示:
CREATEDATABASEstudent;
圖1創(chuàng)建student數(shù)據(jù)庫2.1.2創(chuàng)建用戶數(shù)據(jù)庫當(dāng)我們使用CREATEDATABASE語句創(chuàng)建一個(gè)用戶數(shù)據(jù)庫時(shí),在文件系統(tǒng)中,MySQL為每個(gè)數(shù)據(jù)庫在其對應(yīng)的數(shù)據(jù)目錄下創(chuàng)建一個(gè)與數(shù)據(jù)庫同名的子目錄,用于存儲(chǔ)該數(shù)據(jù)庫的相關(guān)數(shù)據(jù)。如果不作修改,MySQL默認(rèn)的數(shù)據(jù)目錄位于C:\ProgramData\MySQL\MySQLServer8.0\Data下。2.1.2創(chuàng)建用戶數(shù)據(jù)庫因MySQL系統(tǒng)中存在多個(gè)數(shù)據(jù)庫,用戶數(shù)據(jù)庫創(chuàng)建完成后,如果要使用該數(shù)據(jù)庫,需執(zhí)行以下格式的命令選擇它:
USE數(shù)據(jù)庫名;2.1.2創(chuàng)建用戶數(shù)據(jù)庫【例2-2】選擇例2-1中創(chuàng)建的student數(shù)據(jù)庫。操作命令如下,執(zhí)行結(jié)果如圖2所示:
USEstudent;圖2選擇student數(shù)據(jù)庫2.1.2創(chuàng)建用戶數(shù)據(jù)庫如果用戶數(shù)據(jù)庫已完成使命不需要再保留,可以將其從系統(tǒng)中刪除。刪除數(shù)據(jù)庫后,其中保存的數(shù)據(jù)將一并刪除,為其分配的磁盤存儲(chǔ)空間將被回收。刪除用戶數(shù)據(jù)庫使用以下格式的命令:
DROPDATABASE數(shù)據(jù)庫名;2.1.2創(chuàng)建用戶數(shù)據(jù)庫【例2-3】刪除例2-1中創(chuàng)建的student數(shù)據(jù)庫。操作命令如下,執(zhí)行結(jié)果如圖3所示:
DROPDATABASEstudent;圖3刪除student數(shù)據(jù)庫謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門2.1創(chuàng)建數(shù)據(jù)庫2.2創(chuàng)建數(shù)據(jù)表2.3關(guān)于數(shù)據(jù)庫引擎第2章
創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表2.2.12.2.2了解字段的數(shù)據(jù)類型2.2.3創(chuàng)建表操作2.2.4查看和修改表2.2.5刪除數(shù)據(jù)表2.2.6向表添加數(shù)據(jù)2.2.7注意數(shù)據(jù)的規(guī)范了解表的結(jié)構(gòu)和特點(diǎn)2.2創(chuàng)建數(shù)據(jù)表2.2.1了解表的結(jié)構(gòu)和特點(diǎn)目前,主流的數(shù)據(jù)庫管理系統(tǒng)采用二維表格的形式來保存數(shù)據(jù)。表2.1students表stuIdstuNameclasssexbirthtelNoEmailcomment210101001李勇軟件技術(shù)男2003-9-1028885692Liyong@21插班生210101002劉晨軟件技術(shù)女2003-8-622285568Liuchen@126.com
210102003王曉敏計(jì)算機(jī)應(yīng)用女2003-5-3022324912Wangxm@21
220102001張麗麗電子商務(wù)女2004-1-225661120Zhangli@126.com
220102002陳耀輝電子商務(wù)男2004-7-1622883322Chenhui@21轉(zhuǎn)校生2.2.1了解表的結(jié)構(gòu)和特點(diǎn)這樣的二維表格在數(shù)據(jù)庫中又被稱為“關(guān)系”。其中,表中的一行又稱為關(guān)系中的一條記錄,表中的一列又稱為關(guān)系中的一個(gè)字段。在數(shù)據(jù)庫中,表2.2所示的術(shù)語是等價(jià)的。以關(guān)系的形式存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng)稱為關(guān)系數(shù)據(jù)庫。表2.2等價(jià)的術(shù)語表(Table)行(Row)列(Column)關(guān)系(Relation)記錄(Record)字段(Field)2.2.1了解表的結(jié)構(gòu)和特點(diǎn)在一個(gè)關(guān)系中,字段的名稱不能重復(fù),字段排列的先后順序無關(guān)緊要,記錄排列的先后順序也無關(guān)緊要,但任意兩條記錄不能重復(fù)。2.2.1了解表的結(jié)構(gòu)和特點(diǎn)生活中我們常見如表2.3所示的表格結(jié)構(gòu),需要注意,這樣的表格不被數(shù)據(jù)庫所接受,不是關(guān)系。這是因?yàn)?,關(guān)系要求每個(gè)單元格只能存放單個(gè)值,而在表2.3中,一個(gè)單元格“family”被分割成多個(gè)子單元,用于存放多個(gè)值。表2.3family表stuIdstuNamesexfamilyfathermotherbrothersister210101001李勇男李國平王曉麗李偉李珊210101002劉晨女劉昭林李玉萍
劉芳2.2.1了解表的結(jié)構(gòu)和特點(diǎn)在關(guān)系中,同一字段下的數(shù)據(jù)要求其數(shù)據(jù)類型一致,所表示的語義也要一致。如表2.1所示的關(guān)系“students”中,字段“sex”下的數(shù)據(jù),其類型是字符串,所表示的語義是學(xué)生的性別,字段“birth”下的數(shù)據(jù),其類型是日期,表示的語義是學(xué)生的生日,不能是其他的含義。2.2.1了解表的結(jié)構(gòu)和特點(diǎn)為了表述的方便,我們用表名(字段名1,字段名2,……)的形式來描述表的結(jié)構(gòu)。表2.1所示的students表可以描述為:
students(stuId,stuName,class,sex,birth,telNo,Email,comment)2.2.2了解字段的數(shù)據(jù)類型本節(jié)介紹MySQL數(shù)據(jù)庫中常用的數(shù)據(jù)類型。2.2.2了解字段的數(shù)據(jù)類型1.整數(shù)類型整數(shù)類型所表示的數(shù)據(jù)是整數(shù),根據(jù)占用字節(jié)長度的不同,MySQL整數(shù)類型包含tinyint、smallint、mediumint、int/integer、bigint幾種。2.2.2了解字段的數(shù)據(jù)類型1.整數(shù)類型表2.4整數(shù)類型詳細(xì)信息類型存儲(chǔ)字節(jié)數(shù)有符號數(shù)取值范圍無符號數(shù)取值范圍tinyint1-128~1270~255smallint2-32768~327670~65535mediumint3-8388608~83886070~16777215int/integer4-21474483648~21474836470~4294967295bigint8-9223372036854775808~92233720368547758070~184467440737095516152.2.2了解字段的數(shù)據(jù)類型1.整數(shù)類型tinyint型整數(shù)數(shù)據(jù)的默認(rèn)顯示寬度為4位數(shù)字,smallint型整數(shù)數(shù)據(jù)的默認(rèn)顯示寬度為6位數(shù)字,mediumint型整數(shù)數(shù)據(jù)的默認(rèn)顯示寬度為9位數(shù)字,int和integer類型字節(jié)數(shù)和取值范圍相同,使用上是一樣的,數(shù)據(jù)默認(rèn)顯示寬度為11位數(shù)字,bigint型整數(shù)數(shù)據(jù)的默認(rèn)顯示寬度為20位數(shù)字。顯示寬度與數(shù)據(jù)類型的取值范圍無關(guān),只是指定MySQL最大可以顯示的數(shù)字個(gè)數(shù),數(shù)字個(gè)數(shù)小于顯示寬度時(shí)以空格補(bǔ)齊,大于顯示寬度時(shí),只要沒有超過該數(shù)據(jù)類型的取值范圍,依然能夠顯示出來。2.2.2了解字段的數(shù)據(jù)類型1.整數(shù)類型在實(shí)際應(yīng)用中,如果關(guān)系的某一字段保存的數(shù)據(jù)是整數(shù),讀者應(yīng)該預(yù)先估計(jì)該列數(shù)據(jù)可能的取值范圍,將該范圍與以上整型類型的取值范圍進(jìn)行比較,選擇范圍最接近又沒有超出的那一種類型,這樣做可以節(jié)省數(shù)據(jù)的存儲(chǔ)空間。2.2.2了解字段的數(shù)據(jù)類型2.小數(shù)類型如果數(shù)據(jù)是小數(shù),則需要用小數(shù)類型來表示。MySQL中的小數(shù)類型包含浮點(diǎn)數(shù)和定點(diǎn)數(shù)兩類。2.2.2了解字段的數(shù)據(jù)類型2.小數(shù)類型浮點(diǎn)數(shù)類型包含float和double兩種,其中,float是單精度浮點(diǎn)數(shù),double是雙精度浮點(diǎn)數(shù)。表2.5浮點(diǎn)數(shù)類型詳細(xì)信息類型存儲(chǔ)字節(jié)數(shù)有符號數(shù)取值范圍無符號數(shù)取值范圍float4-3.402823466E+38~-1.175494351E-380和1.175494351E-38~3.402823466E+38double8-1.7976931348623157E+308~-2.2250738585072014E-3080和2.2250738585072014E-308~1.7976931348623157E+3082.2.2了解字段的數(shù)據(jù)類型2.小數(shù)類型定點(diǎn)數(shù)類型為decimal型,其取值范圍與浮點(diǎn)數(shù)double型相同。但decimal型在使用時(shí),需指定其精度和小數(shù)數(shù)位,使用格式為:
decimal(p,d)其中,參數(shù)p代表精度,即數(shù)據(jù)的最大總位數(shù),d代表數(shù)據(jù)的最大小數(shù)位數(shù)。p的取值范圍為1~65,d的取值范圍為0~30并且d<=p。p的默認(rèn)值為10,d的默認(rèn)值為0。decimal型數(shù)據(jù)存儲(chǔ)的字節(jié)數(shù)為p+2。2.2.2了解字段的數(shù)據(jù)類型2.小數(shù)類型在MySQL中,定點(diǎn)數(shù)以字符串形式存儲(chǔ),提供了更高的精度,在對數(shù)據(jù)精度要求比較高的情況下(如表示貨幣、科學(xué)數(shù)據(jù)時(shí)),優(yōu)先使用decimal類型。2.2.2了解字段的數(shù)據(jù)類型3.日期和時(shí)間類型如果需要在數(shù)據(jù)庫中存儲(chǔ)日期和時(shí)間數(shù)據(jù),則需要使用日期和時(shí)間類型。MySQL中日期和時(shí)間類型包括year、date、time、datetime、timestamp幾種。表2.6日期和時(shí)間類型詳細(xì)信息類型存儲(chǔ)字節(jié)數(shù)取值范圍使用格式y(tǒng)ear11901~2155YYYYdate31000-01-01~9999-12-31YYYY-MM-DDtime3-838:59:59~838:59:59HH:MM:SSdatetime81000-01-0100:00:00~9999-12-3123:59:59YYYY-MM-DDHH:MM:SStimestamp41970-01-0100:00:01UTC~2038-01-1903:14:07UTCYYYY-MM-DDHH:MM:SS2.2.2了解字段的數(shù)據(jù)類型3.日期和時(shí)間類型在實(shí)際使用中,有一些需要用日期和時(shí)間來表示的數(shù)據(jù),如人的出生日期、網(wǎng)上購物的下單日期、圖書館借書的借閱日期等,讀者可根據(jù)需要表示的日期和時(shí)間的范圍和格式,合理選擇以上類型。如果插入的數(shù)據(jù),其值超過了上表所示的取值范圍,系統(tǒng)會(huì)報(bào)錯(cuò)并將零值插入數(shù)據(jù)庫。2.2.2了解字段的數(shù)據(jù)類型3.日期和時(shí)間類型這里對time類型的取值范圍做一些說明。一天只有24個(gè)小時(shí),而time類型取值范圍為-838:59:59~838:59:59,小時(shí)部分為何如此之大呢?這是因?yàn)椋瑃ime類型不僅可以表示一天內(nèi)的時(shí)間,還可以表示某個(gè)事件過去的時(shí)間,或者兩個(gè)事件之間的時(shí)間間隔,這樣超過24小時(shí)就很正常了。timestamp類型取值范圍中的UTC代表世界標(biāo)準(zhǔn)時(shí)間,該類型數(shù)據(jù)在存儲(chǔ)時(shí)是以世界標(biāo)準(zhǔn)時(shí)間格式存儲(chǔ)的。2.2.2了解字段的數(shù)據(jù)類型4.字符串類型字符串類型是數(shù)據(jù)庫中最常用的數(shù)據(jù)類型,用來存儲(chǔ)各種文字、數(shù)字符號、特殊符號,也可以存儲(chǔ)圖片和聲音的二進(jìn)制數(shù)據(jù)。MySQL中字符串類型包括char、varchar、tinytext、text、mediumtext、longtext、enum、set類型等。字符串類型的數(shù)據(jù)在使用時(shí)需要加上一對單引號括起來。2.2.2了解字段的數(shù)據(jù)類型4.字符串類型字符串類型是數(shù)據(jù)庫中最常用的數(shù)據(jù)類型,用來存儲(chǔ)各種文字、數(shù)字符號、特殊符號,也可以存儲(chǔ)圖片和聲音的二進(jìn)制數(shù)據(jù)。MySQL中字符串類型包括char、varchar、tinytext、text、mediumtext、longtext、enum、set類型等。字符串類型的數(shù)據(jù)在使用時(shí)需要加上一對單引號括起來。2.2.2了解字段的數(shù)據(jù)類型4.字符串類型表2.7字符串類型詳細(xì)信息類型說明取值范圍char(n)表示長度為n個(gè)字節(jié)的非二進(jìn)制固定長度字符串。n的值在1~255之間。varchar(n)表示長度為n個(gè)字節(jié)的非二進(jìn)制可變長度字符串。n的值在1~65535之間。tinytext表示非常短的文本。0~255字節(jié)text表示文本。0~65535字節(jié)mediumtext表示中等長度的文本。0~16777215字節(jié)longtext表示長文本。0~4294967295字節(jié)enum表示枚舉類型。其取值列表最多可以有65535個(gè)值。set表示字符串,其值可以取列表中的一個(gè)或多個(gè)。其值最多能有64個(gè)元素構(gòu)成的組合。2.2.2了解字段的數(shù)據(jù)類型4.字符串類型char(n)是固定長度,長度為n的字符串,如果存儲(chǔ)的字符串長度小于n,其后會(huì)以空格補(bǔ)充,直至長度達(dá)到n。varchar(n)是可變長度字符串,系統(tǒng)會(huì)按字符串的實(shí)際長度進(jìn)行存儲(chǔ),只要長度沒有超過n。2.2.2了解字段的數(shù)據(jù)類型4.字符串類型tinytext、text、mediumtext、longtext類型屬于特殊的字符串類型,用于保存文章、評論、簡歷、新聞等內(nèi)容,它們允許表示的字符串長度依次增大,實(shí)際使用時(shí),讀者可根據(jù)需求進(jìn)行適當(dāng)選取。2.2.2了解字段的數(shù)據(jù)類型4.字符串類型enum類型表示枚舉類型,使用時(shí)要以列表的形式指定其取值范圍,格式如下:
字段名enum('值1','值2',...'值n')其中,字段名表示要定義的字段,值n表示列表中的第n個(gè)值,最多可以有65535個(gè)值。enum類型的字段在取值時(shí)只能從列表中選取一個(gè)值。列表中的每個(gè)值對應(yīng)一個(gè)編號,分別是1,2,...n,系統(tǒng)在存儲(chǔ)enum類型字段下的數(shù)據(jù)時(shí),實(shí)際存儲(chǔ)的就是對應(yīng)的編號。enum類型字段下如果沒有填充數(shù)據(jù),系統(tǒng)將以默認(rèn)值填充。如果該字段不允許取空值(NULL),則默認(rèn)值為列表中的第一個(gè)值;如果該字段允許取空值(NULL),則默認(rèn)值為空值。2.2.2了解字段的數(shù)據(jù)類型4.字符串類型set類型字段的定義格式與enum類型相似,要以列表的形式指定其取值范圍,格式如下:字段名set('值1','值2',...'值n')其中,字段名表示要定義的字段,值n表示列表中的第n個(gè)值。與enum類型不同的是,字段在取值時(shí)可以從列表中選取一個(gè)或多個(gè)值,最多可以是64個(gè)值構(gòu)成的組合。取多個(gè)值時(shí),值之間用逗號分隔。2.2.2了解字段的數(shù)據(jù)類型5.二進(jìn)制類型二進(jìn)制類型用于存儲(chǔ)二進(jìn)制字符串。MySQL中二進(jìn)制類型包括bit,binary,varbinary,tinyblob,blob,mediumblob,longblob幾種。2.2.2了解字段的數(shù)據(jù)類型5.二進(jìn)制類型表2.8二進(jìn)制類型詳細(xì)信息類型說明取值范圍bit(n)表示長度為n個(gè)字節(jié)的二進(jìn)制位字段值。n的值在1~64之間,默認(rèn)值為1。binary(n)表示長度為n個(gè)字節(jié)的二進(jìn)制固定長度字符串。n的值在0~255之間。varbinary(n)表示長度為n個(gè)字節(jié)的二進(jìn)制可變長度字符串。n的值在1~65535之間。tinyblob表示非常小的blob。0~255Bblob表示小的blob。0~65535Bmediumblob表示中等大小的blob。0~16777215Blongblob表示非常大的blob。0~4294967295B2.2.2了解字段的數(shù)據(jù)類型5.二進(jìn)制類型bit類型是位字段類型。如果bit(n)存儲(chǔ)的值長度小于n,值的左邊用0填充。如果以二進(jìn)制數(shù)保存十進(jìn)制數(shù)13,可以定義為bit(4),因?yàn)?3的二進(jìn)制數(shù)為1101,正好可以存下。2.2.2了解字段的數(shù)據(jù)類型5.二進(jìn)制類型binary和varbinary與char和varchar類型有點(diǎn)類似,不同的是binary和varbinary存儲(chǔ)的是二進(jìn)制的字符串,而非字符型字符串。也就是說,binary和varbinary沒有字符集的概念,對其排序和比較都是按照二進(jìn)制值進(jìn)行對比。tinyblob,blob,mediumblob,longblob類型主要用于以二進(jìn)制字符串形式存儲(chǔ)圖片、音頻等信息。它們允許表示的二進(jìn)制字符串長度依次增大,實(shí)際使用時(shí),讀者可根據(jù)需求進(jìn)行適當(dāng)選取。2.2.2了解字段的數(shù)據(jù)類型了解了MySQL中數(shù)據(jù)類型,在實(shí)際使用中,應(yīng)根據(jù)需要表示的數(shù)據(jù)的情況,在創(chuàng)建表時(shí),要為表中的字段選擇合適的數(shù)據(jù)類型。確定字段數(shù)據(jù)類型的重要原則是:根據(jù)該字段將進(jìn)行怎樣的操作,以及數(shù)據(jù)的實(shí)質(zhì)意義。確定字段大小的重要原則是:根據(jù)該字段的數(shù)據(jù)最有可能出現(xiàn)的最大值來確定。2.2.2了解字段的數(shù)據(jù)類型【例2-4】分析表2.1students數(shù)據(jù)表的結(jié)構(gòu)和數(shù)據(jù),確定該表各字段的數(shù)據(jù)類型。從表2.1可知,students數(shù)據(jù)表包含8個(gè)字段,分別表示學(xué)生的學(xué)號、姓名、班級、性別、出生日期、聯(lián)系電話、Email和備注信息。根據(jù)數(shù)據(jù)的表現(xiàn)形式和長度,確定字段的數(shù)據(jù)類型如表2.10所示。表2.10students表字段的數(shù)據(jù)類型字段名數(shù)據(jù)類型stuIdchar(9)stuNamevarchar(10)classvarchar(30)sexenumbirthdatetelNovarchar(15)Emailvarchar(50)commentvarchar(100)2.2.3創(chuàng)建表操作在關(guān)系數(shù)據(jù)庫中數(shù)據(jù)是保存在表里面的,因此,要將數(shù)據(jù)存入數(shù)據(jù)庫,就應(yīng)該首先建立數(shù)據(jù)表。創(chuàng)建表之前,要使用“USE數(shù)據(jù)庫名”命令選擇數(shù)據(jù)庫,指定將表保存在哪個(gè)數(shù)據(jù)庫中。2.2.3創(chuàng)建表操作創(chuàng)建表的語法格式如下:CREATETABLE表名(列名1數(shù)據(jù)類型[列級約束條件][默認(rèn)值],列名2數(shù)據(jù)類型[列級約束條件][默認(rèn)值],......[表級約束條件]);2.2.3創(chuàng)建表操作【例2-5】在數(shù)據(jù)庫student中創(chuàng)建數(shù)據(jù)表students,建表命令如下:2.2.4查看和修改表數(shù)據(jù)表創(chuàng)建完成后,可以通過DESCRIBE語句來查看表的結(jié)構(gòu),這對于用戶而言非常方便。因?yàn)閿?shù)據(jù)庫是一個(gè)多用戶系統(tǒng),并非所有數(shù)據(jù)表都是由當(dāng)前用戶創(chuàng)建的,要查看和使用其他用戶創(chuàng)建的表,就必須首先了解表的結(jié)構(gòu)。2.2.4查看和修改表DESCRIBE語句的語法格式如下:
DESCRIBE表名;也可寫作:
DES表名;2.2.4查看和修改表【例2-6】使用DESCRIBE語句查看數(shù)據(jù)表students的結(jié)構(gòu)。2.2.4查看和修改表如果要調(diào)整已經(jīng)存在于數(shù)據(jù)庫中的表的結(jié)構(gòu),則需要使用修改表命令。修改表包括修改表名、修改字段名和數(shù)據(jù)類型、增加字段、刪除字段等。2.2.4查看和修改表1.修改表名修改表名的命令語法結(jié)構(gòu)如下:
ALTERTABLE舊表名RENAME[TO]新表名;其中,參數(shù)TO是可選的,寫與不寫不影響命令的執(zhí)行。修改表名時(shí)需注意,同一個(gè)數(shù)據(jù)庫中每個(gè)表的名稱應(yīng)該是唯一的,不能出現(xiàn)重名的情況。2.2.4查看和修改表【例2-7】將student數(shù)據(jù)庫中的sc數(shù)據(jù)表名稱修改為stu_cor。2.2.4查看和修改表2.修改字段名和數(shù)據(jù)類型修改字段名的命令語法結(jié)構(gòu)如下:ALTERTABLE表名CHANGE舊字段名新字段名新數(shù)據(jù)類型;其中,舊字段名和新字段名分別表示修改前后的字段名稱,新數(shù)據(jù)類型表示字段名修改后,該字段的數(shù)據(jù)類型。新數(shù)據(jù)類型可以和原來該字段的數(shù)據(jù)類型一樣,但此處不可以省略。2.2.4查看和修改表【例2-8】修改student數(shù)據(jù)庫中的數(shù)據(jù)表students,將字段birth名稱修改為birthday,數(shù)據(jù)類型保持不變。2.2.4查看和修改表如果不需要修改字段名,僅對字段的數(shù)據(jù)類型進(jìn)行修改,可使用如下命令:
ALTERTABLE表名MODIFY字段名數(shù)據(jù)類型;2.2.4查看和修改表【例2-9】修改student數(shù)據(jù)庫中的數(shù)據(jù)表students,將字段comment的數(shù)據(jù)類型修改為varchar(80)。2.2.4查看和修改表在對字段的數(shù)據(jù)類型進(jìn)行修改時(shí)需要注意,因不同類型和長度的數(shù)據(jù)在數(shù)據(jù)庫中存儲(chǔ)的方式不同,如果表中已保存有數(shù)據(jù),修改字段的數(shù)據(jù)類型會(huì)對現(xiàn)有的數(shù)據(jù)存儲(chǔ)造成影響。應(yīng)盡量避免對已有數(shù)據(jù)的表進(jìn)行字段數(shù)據(jù)類型的修改。2.2.4查看和修改表3.增加字段如果需要在已經(jīng)存在的數(shù)據(jù)表中增加字段,可使用以下格式的命令:
ALTERTABLE表名ADD新字段名數(shù)據(jù)類型
[約束條件][FIRST|AFTER已存在的字段名]其中,新字段名表示要增加的字段名稱,其后的數(shù)據(jù)類型指定該字段的數(shù)據(jù)類型;約束條件是可選的,將在下一節(jié)進(jìn)行講解;FIRST表示新增加的字段位于表中的第一列,AFTER表示將新字段放在已存在的指定字段后面,這兩項(xiàng)也是可選的,如果不指定位置,新增加的字段將位于表的最后一列。2.2.4查看和修改表【例2-10】對student數(shù)據(jù)庫中的數(shù)據(jù)表students增加一個(gè)字段school,表示學(xué)生所在的學(xué)校,數(shù)據(jù)類型為varchar(40),該字段位于stuName列之后。2.2.4查看和修改表4.刪除字段刪除表中字段的命令語法格式如下:
ALTERTABLE表名DROP字段名;2.2.4查看和修改表【例2-11】將例2-10中增加的字段school從數(shù)據(jù)表students中刪除。2.2.5刪除數(shù)據(jù)表如果數(shù)據(jù)表不需要再保存在數(shù)據(jù)庫中,可以將它刪除。刪除表時(shí),表結(jié)構(gòu)的定義和表中的數(shù)據(jù)將一并刪除。刪除數(shù)據(jù)表的命令語法結(jié)構(gòu)如下:
DROPTABLE表名;2.2.5刪除數(shù)據(jù)表【例2-12】將student數(shù)據(jù)庫中的students數(shù)據(jù)表刪除。2.2.6向表中添加數(shù)據(jù)為方便后續(xù)操作,我們首先使用MySQL圖形化工具Navicat向數(shù)據(jù)庫中添加部分?jǐn)?shù)據(jù)。2.2.6向表中添加數(shù)據(jù)【例2-13】使用Navicat連接MySQL,向student數(shù)據(jù)庫中的三張數(shù)據(jù)表students、courses、sc分別添加表2.1、2.11、2.12中的數(shù)據(jù)。2.2.6向表中添加數(shù)據(jù)【例2-13】使用Navicat連接MySQL,向student數(shù)據(jù)庫中的三張數(shù)據(jù)表students、courses、sc分別添加表2.1、2.11、2.12中的數(shù)據(jù)。2.2.7注意數(shù)據(jù)的規(guī)范當(dāng)我們向表中添加數(shù)據(jù)時(shí),應(yīng)注意數(shù)據(jù)的規(guī)范性。規(guī)范的數(shù)據(jù)意味著數(shù)據(jù)符合字段設(shè)計(jì)的原意。如果數(shù)據(jù)不規(guī)范,會(huì)影響查找、統(tǒng)計(jì)的結(jié)果,甚至造成很嚴(yán)重的后果。2.2.7注意數(shù)據(jù)的規(guī)范1.空值空值是一個(gè)微妙但又十分重要的問題??罩?,只是一個(gè)位置的占用,從數(shù)據(jù)庫內(nèi)部來說,空值是歧義的,所以空值和任意數(shù)據(jù)的算術(shù)運(yùn)算,結(jié)果都是空值。這一點(diǎn),在對表進(jìn)行查詢統(tǒng)計(jì)時(shí)一定要小心。在設(shè)計(jì)表時(shí),應(yīng)盡量不允許字段值為空。2.2.7注意數(shù)據(jù)的規(guī)范2.空格及其他空白字符空格不是空值,空格相當(dāng)于一個(gè)英文字母。另外,在ASCII碼中,還有其他不可見的空白字符,這些空白字符也都相當(dāng)于一個(gè)英文字母,這和空值是不一樣的。2.2.7注意數(shù)據(jù)的規(guī)范3.英文大小寫、全角半角對于英文和符號,應(yīng)規(guī)定大小寫規(guī)則,不應(yīng)該隨意地大寫或小寫。另外,還要注意全角和半角的問題,不要一會(huì)兒用全角,一會(huì)兒用半角,建議如無特別需求,只用半角。在后續(xù)學(xué)習(xí)結(jié)構(gòu)化查詢語言SQL時(shí)讀者會(huì)發(fā)現(xiàn),SQL只接受半角的符號,如果輸入的是全角,則語句執(zhí)行時(shí)會(huì)報(bào)錯(cuò)。謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門2.1創(chuàng)建數(shù)據(jù)庫2.2創(chuàng)建數(shù)據(jù)表2.3關(guān)于數(shù)據(jù)庫引擎第2章
創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表2.3.1查看MySQL支持的存儲(chǔ)引擎2.3.2了解常用的存儲(chǔ)引擎2.3關(guān)于數(shù)據(jù)庫存儲(chǔ)引擎2.3.3選擇合適的存儲(chǔ)引擎2.3關(guān)于數(shù)據(jù)庫存儲(chǔ)引擎MySQL引入了存儲(chǔ)引擎的概念,存儲(chǔ)引擎是數(shù)據(jù)庫底層的軟件組件。數(shù)據(jù)庫管理系統(tǒng)使用存儲(chǔ)引擎進(jìn)行創(chuàng)建、查詢、更新和刪除數(shù)據(jù)操作。MySQL支持多個(gè)不同的存儲(chǔ)引擎,不同的存儲(chǔ)引擎提供不同的數(shù)據(jù)存儲(chǔ)機(jī)制、索引技巧、鎖定水平等功能。存儲(chǔ)引擎是MySQL的核心。用戶可以根據(jù)實(shí)際應(yīng)用需要來選擇使用何種存儲(chǔ)引擎,從而提高了MySQL數(shù)據(jù)庫管理系統(tǒng)的使用效率和靈活性。2.3關(guān)于數(shù)據(jù)庫存儲(chǔ)引擎2.3.1查看MySQL支持的存儲(chǔ)引擎MySQL通過SHOWENGINES命令來查看系統(tǒng)支持的存儲(chǔ)引擎。2.3.1查看MySQL支持的存儲(chǔ)引擎MySQL中創(chuàng)建數(shù)據(jù)表時(shí),如果沒有指定存儲(chǔ)引擎,將使用系統(tǒng)默認(rèn)的存儲(chǔ)引擎來存儲(chǔ)數(shù)據(jù)表??梢酝ㄟ^SHOWVARIABLES命令來查看當(dāng)前系統(tǒng)默認(rèn)的存儲(chǔ)引擎,具體語句如下:
SHOWVARIABLESLIKE'default_storage_engine';2.3.1查看MySQL支持的存儲(chǔ)引擎可以通過SETDEFAULT_STORAGE_ENGINE命令修改系統(tǒng)默認(rèn)存儲(chǔ)引擎,如將默認(rèn)存儲(chǔ)引擎修改為MyISAM,可使用以下語句:
SETDEFAULT_STORAGE_ENGINE=MyISAM;2.3.2了解常用的存儲(chǔ)引擎1、InnoDB存儲(chǔ)引擎InnoDB存儲(chǔ)引擎是MySQL5.5.5版本后支持的默認(rèn)存儲(chǔ)引擎。InnoDB的設(shè)計(jì)目標(biāo)是處理大容量數(shù)據(jù)時(shí)最大化性能,它的CPU利用率是其他基于磁盤的關(guān)系數(shù)據(jù)庫引擎中最有效率的。
InnoDB支持外鍵約束,為MySQL表提供了事務(wù)、回滾以及系統(tǒng)崩潰修復(fù)能力和多版本并發(fā)控制的事務(wù)安全性。InnoDB適用于具有高并發(fā)且更新操作比較多的表、需要使用事務(wù)的表、對自動(dòng)災(zāi)難恢復(fù)有要求的表。2.3.2了解常用的存儲(chǔ)引擎2、MyISAM存儲(chǔ)引擎MyISAM存儲(chǔ)引擎是MySQL5.5.5版本之前支持的默認(rèn)存儲(chǔ)引擎。MyISAM是在Web、數(shù)據(jù)倉儲(chǔ)和其他應(yīng)用環(huán)境下常用的存儲(chǔ)引擎,擁有較快的數(shù)據(jù)寫入、查詢速度和全文檢索能力。MyISAM不支持事務(wù),也不支持外鍵,適用于要求訪問速度快,對事務(wù)完整性沒有要求或者以數(shù)據(jù)寫入、查詢?yōu)橹鞯膽?yīng)用環(huán)境。2.3.2了解常用的存儲(chǔ)引擎3、MEMORY存儲(chǔ)引擎MEMORY存儲(chǔ)引擎將所有數(shù)據(jù)保存在內(nèi)存中,在需要快速查找引用和其他類似數(shù)據(jù)的環(huán)境下,MEMORY可提供極快的訪問速度。因?yàn)镸EMORY存儲(chǔ)引擎文件數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,如果mysqld進(jìn)程發(fā)生異常,重啟或關(guān)閉機(jī)器,這些數(shù)據(jù)都會(huì)消失,所以MEMORY存儲(chǔ)引擎中的表,生命周期很短,一般只使用一次。MySQL使用該引擎保存臨時(shí)表,存放查詢的中間結(jié)果。2.3.3選擇合適的存儲(chǔ)引擎不同的存儲(chǔ)引擎有各自的特點(diǎn),適用于不同的應(yīng)用環(huán)境。表2.16三種常用存儲(chǔ)引擎的功能總結(jié)功能InnoDBMYISAMMEMORY存儲(chǔ)限制64TB256TBRAM支持事務(wù)YesNoNo支持全文索引NoYesNo支持?jǐn)?shù)索引YesYesYes支持哈希索引NoNoYes支持?jǐn)?shù)據(jù)緩存YesNoN/A支持外鍵YesNoNo2.3.3選擇合適的存儲(chǔ)引擎總結(jié)來看,如果需要數(shù)據(jù)庫系統(tǒng)提供提交、回滾、崩潰恢復(fù)等事物安全能力,并要求實(shí)現(xiàn)并發(fā)控制,可以選擇InnoDB存儲(chǔ)引擎;如果數(shù)據(jù)表主要用來寫入和查詢數(shù)據(jù),MyISAM存儲(chǔ)引擎能提供較高的處理效率;如果只是臨時(shí)存放數(shù)據(jù),數(shù)據(jù)量并不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇將數(shù)據(jù)保存在內(nèi)存中的MEMORY存儲(chǔ)引擎。謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門3.1鍵3.2級聯(lián)更新和級聯(lián)刪除3.3表間聯(lián)系第3章
理解數(shù)據(jù)庫相關(guān)概念3.4排序與索引3.5實(shí)施約束3.1.1主鍵和實(shí)體完整性3.1.2為表設(shè)置主鍵3.1鍵3.1.3外鍵和參照完整性3.1.4為表設(shè)置外鍵3.1.1主鍵和實(shí)體完整性鍵(Key)是關(guān)系中一列或者多列的組合。關(guān)系中存在一些鍵,它們保存的數(shù)據(jù),其值是唯一的,可以用來唯一地標(biāo)識表中的一條記錄。我們從這些能唯一標(biāo)識一條記錄的鍵中選擇一個(gè)作為主鍵(PrimaryKey)。簡單的情況下,主鍵只包含一列,在復(fù)雜的情況下,主鍵可能包含多列,甚至包含關(guān)系中的全部列。3.1.1主鍵和實(shí)體完整性請注意,判斷某些鍵是否能唯一標(biāo)識一條記錄,僅對關(guān)系中現(xiàn)有的數(shù)據(jù)進(jìn)行檢查是不夠的。現(xiàn)有的數(shù)據(jù)沒有重復(fù),并不代表將來保存在關(guān)系中的數(shù)據(jù)不會(huì)發(fā)生重復(fù)。在實(shí)際應(yīng)用中,數(shù)據(jù)庫設(shè)計(jì)者必須詢問用戶或相關(guān)專家,以確定哪些鍵能唯一標(biāo)識一條記錄。3.1.1主鍵和實(shí)體完整性選取主鍵的一般原則是,主鍵盡量簡單而確定。整型數(shù)據(jù)操作起來效率比其他數(shù)據(jù)類型高,主鍵應(yīng)優(yōu)先考慮整型;而隱私信息則最好不要用作主鍵,如身份證號。3.1.1主鍵和實(shí)體完整性主鍵確定后,我們在描述表的結(jié)構(gòu)時(shí)可在主鍵的下方加上下劃線。students(stuId,stuName,class,sex,birth,telNo,Email,comment)3.1.1主鍵和實(shí)體完整性既然主鍵用于唯一標(biāo)識關(guān)系中的一條記錄,那么主鍵下的數(shù)據(jù)項(xiàng)不能為空值,因?yàn)榭罩挡荒苡糜跇?biāo)識記錄。同時(shí),主鍵下的數(shù)據(jù)項(xiàng)也不能出現(xiàn)重復(fù),因?yàn)橐坏┌l(fā)生重復(fù),就不再是唯一標(biāo)識了。這種保證主鍵字段的取值唯一且不能為空值的規(guī)則,稱為實(shí)體完整性。3.1.2為表設(shè)置主鍵設(shè)置主鍵有兩種方式,一是直接通過命令進(jìn)行設(shè)置,二是通過圖形化工具進(jìn)行設(shè)置。3.1.2為表設(shè)置主鍵通過命令為表設(shè)置主鍵CREATETABLE表名(列名1數(shù)據(jù)類型[列級約束條件][默認(rèn)值],列名2數(shù)據(jù)類型[列級約束條件][默認(rèn)值],......[表級約束條件]);創(chuàng)建表時(shí),可以在列級約束條件或表級約束條件中設(shè)置主鍵。在列級約束條件中設(shè)置主鍵適用于主鍵是單個(gè)列的情況,直接在該列的數(shù)據(jù)類型后面加上PRIMARYKEY。在表級約束條件中設(shè)置主鍵適用于主鍵是多個(gè)列的組合的情況,格式為PRIMARYKEY(列名1,列名2...)。3.1.2為表設(shè)置主鍵【例3-1】在數(shù)據(jù)庫student中創(chuàng)建數(shù)據(jù)表students,同時(shí)指定stuId列為主鍵。createtablestudents(stuIdchar(9)primarykey,stuNamevarchar(10),classvarchar(30),sexenum('男','女'),birthdate,telNovarchar(15),Emailvarchar(50),commentvarchar(100));3.1.2為表設(shè)置主鍵【例3-2】在數(shù)據(jù)庫student中創(chuàng)建數(shù)據(jù)表sc,同時(shí)指定stuId和corId列組合為主鍵。createtablesc(stuIdchar(9),corIdchar(3),scoredecimal(4,1),strDatedate,primarykey(stuId,corId));3.1.2為表設(shè)置主鍵如果一個(gè)數(shù)據(jù)表已經(jīng)存在于數(shù)據(jù)庫系統(tǒng)中,只是在創(chuàng)建表時(shí)沒有設(shè)置主鍵,則可以使用修改表命令增加主鍵的設(shè)置。命令如下:
ALTERTABLE表名MODIFY字段名數(shù)據(jù)類型PRIMARYKEY;3.1.2為表設(shè)置主鍵【例3-3】對于數(shù)據(jù)庫student中已經(jīng)存在的數(shù)據(jù)表courses,設(shè)置列corId為主鍵。
ALTERTABLEcoursesMODIFYcorIdPRIMARYKEY;3.1.2為表設(shè)置主鍵通過圖形化工具為表設(shè)置主鍵【例3-4】使用Navicat為數(shù)據(jù)庫student中的students表設(shè)置主鍵。3.1.2為表設(shè)置主鍵通過圖形化工具為表設(shè)置主鍵【例3-5】使用Navicat為數(shù)據(jù)庫student中的sc表設(shè)置主鍵。3.1.3外鍵和參照完整性所謂外鍵(ForeignKey),指的是在關(guān)系A(chǔ)中的鍵F,如果與關(guān)系B中的主鍵K相對應(yīng),則鍵F稱為關(guān)系A(chǔ)的外鍵。3.1.3外鍵和參照完整性外鍵的數(shù)據(jù)必須在相對應(yīng)的主鍵中預(yù)先存在的規(guī)則,稱為參照完整性。參照完整性在一定程度上保證了數(shù)據(jù)庫中數(shù)據(jù)的正確性。3.1.4為表設(shè)置外鍵設(shè)置外鍵有兩種方式,一是直接通過命令進(jìn)行設(shè)置,二是通過圖形化工具進(jìn)行設(shè)置。3.1.4為表設(shè)置外鍵通過命令為表設(shè)置外鍵創(chuàng)建表時(shí),可以在表級約束條件中設(shè)置外鍵。設(shè)置外鍵的命令語法格式如下:
[CONSTRAINT外鍵名]FOREIGNKEY(列名)REFERENCES主表名(列名)其中,外鍵名是設(shè)置的外鍵的名稱,可以省略不寫;列名為要設(shè)置外鍵的列,主表名為其對應(yīng)的主鍵表名,列名為主鍵列名。3.1.4為表設(shè)置外鍵【例3-6】在數(shù)據(jù)庫student中創(chuàng)建數(shù)據(jù)表sc,指定stuId和corId列組合為主鍵。同時(shí),指定stuId列為外鍵,參考students表的主鍵stuId,指定corId列為外鍵,參考courses表的主鍵corId。createtablesc(stuIdchar(9),corIdchar(3),scoredecimal(4,1),strDatedate,primarykey(stuId,corId),Foreignkey(stuId)referencesstudents(stuId),Foreignkey(corId)referencescourses(corId));3.1.4為表設(shè)置外鍵通過圖形化工具設(shè)置外鍵【例3-7】使用Navicat為數(shù)據(jù)庫student中的sc表設(shè)置外鍵。3.2級聯(lián)更新和級聯(lián)刪除3.2級聯(lián)更新和級聯(lián)刪除所謂級聯(lián)更新,指在設(shè)置好外鍵的表A和B之間,如果表B的主鍵K中某一數(shù)據(jù)項(xiàng)發(fā)生更改,則數(shù)據(jù)庫會(huì)自動(dòng)更改表A的外鍵F中對應(yīng)的數(shù)據(jù)項(xiàng)(如果存在對應(yīng))。3.2級聯(lián)更新和級聯(lián)刪除所謂級聯(lián)刪除,指如果表B的主鍵K中某一數(shù)據(jù)項(xiàng)被刪除了,則數(shù)據(jù)庫會(huì)自動(dòng)刪除表A的外鍵F中對應(yīng)的數(shù)據(jù)項(xiàng)(如果存在對應(yīng))。3.2級聯(lián)更新和級聯(lián)刪除【例3-8】使用Navicat分別為student數(shù)據(jù)庫中的students表和sc表、courses表和sc表之間的主外鍵關(guān)系設(shè)置級聯(lián)更新和級聯(lián)刪除。3.2級聯(lián)更新和級聯(lián)刪除【例3-8】使用Navicat分別為student數(shù)據(jù)庫中的students表和sc表、courses表和sc表之間的主外鍵關(guān)系設(shè)置級聯(lián)更新和級聯(lián)刪除。3.3.1一對一聯(lián)系3.3.2一對多聯(lián)系3.3表間聯(lián)系3.3.3多對多聯(lián)系3.3.1
一對一聯(lián)系如果第一個(gè)表的一條記錄僅關(guān)聯(lián)到第二個(gè)表的一條(或零條)記錄,并且第二個(gè)表的一條記錄也僅關(guān)聯(lián)到第一個(gè)表的一條記錄(注意,此時(shí)必須有一條關(guān)聯(lián)記錄,不能是零條),就稱這對表之間存在一對一的聯(lián)系。這時(shí),第一個(gè)表為父表,第二個(gè)表為子表。3.3.2
一對多聯(lián)系如圖3-15所示,students表中含有“dorNo”這一外鍵,表示宿舍序號,對應(yīng)dormitory表中的主鍵“no”?,F(xiàn)實(shí)的情況是,一個(gè)學(xué)生住在一間宿舍,一間宿舍可以住多名學(xué)生,或者一名學(xué)生都不住。表現(xiàn)在表上,對于students表,每條記錄有一個(gè)宿舍序號dorNo;dormitory表(no為主鍵)的一條記錄對應(yīng)學(xué)生表(dorNo為外鍵)零條或多條記錄。這種表間聯(lián)系即為一對多聯(lián)系,其中dormitory表是父表,students表是子表。一對多聯(lián)系是數(shù)據(jù)庫中出現(xiàn)最多、最為重要的表間聯(lián)系。3.3.2
一對多聯(lián)系3.3.3
多對多聯(lián)系如果第一個(gè)表的一條記錄可以關(guān)聯(lián)到第二個(gè)表的一條或多條記錄,并且第二個(gè)表的一條記錄,也可關(guān)聯(lián)到第一個(gè)表的一條或多條記錄,或者更精確地說,第一個(gè)表與第二個(gè)表是一對多,第二個(gè)表與第一個(gè)表也是一對多,就稱這兩個(gè)表之間存在多對多聯(lián)系。3.3.3
多對多聯(lián)系多對多的聯(lián)系難以在數(shù)據(jù)庫中直接表示,一般要轉(zhuǎn)換成兩個(gè)一對多的聯(lián)系。3.3.3
多對多聯(lián)系了解了表間聯(lián)系之后,我們?nèi)绾闻袛鄶?shù)據(jù)庫中存在的多個(gè)表兩兩之間到底有沒有聯(lián)系,又是哪種聯(lián)系呢?可以采用以下的步驟進(jìn)行判斷:
(1)看看兩個(gè)表之間是否存在主外鍵的關(guān)聯(lián),即一個(gè)表的主鍵是否在另外一個(gè)表中出現(xiàn)了。如果不存在,則這兩個(gè)表一般沒有聯(lián)系。如果存在關(guān)聯(lián),則繼續(xù)步驟(2)。
(2)看看主鍵所在表中的一條記錄對應(yīng)外鍵所在表的幾條記錄。如果主鍵表一條記錄僅對應(yīng)外鍵表一條或零條記錄,則這兩個(gè)表之間存在一對一聯(lián)系;如果主鍵表一條記錄對應(yīng)外鍵表多條或零條記錄,則這兩個(gè)表之間存在一對多聯(lián)系。實(shí)際上,一對多的聯(lián)系是數(shù)據(jù)庫中存在最多的表間聯(lián)系。多對多聯(lián)系因?yàn)殡y以在數(shù)據(jù)庫中表達(dá),一般都會(huì)轉(zhuǎn)換成兩個(gè)一對多來表示。3.4.1排序3.4.2索引3.4排序和索引3.4.1
排序在數(shù)據(jù)庫中,常規(guī)的排序規(guī)則如下:(1)數(shù)值型數(shù)據(jù):按值的大小進(jìn)行排序。(2)英文字符:按英文碼表內(nèi)的編碼進(jìn)行排序,如ASCII碼。(3)中文字符:按中文碼表內(nèi)的編碼進(jìn)行排序。表面上看,一般是按拼音的字典順序進(jìn)行排序。(4)英文符號比中文符號小,中文符號比中文字小,而空值是最小的。3.4.1
排序在數(shù)據(jù)庫中,常規(guī)的排序規(guī)則如下:(5)可能在數(shù)據(jù)庫系統(tǒng)中,指定了別的排序規(guī)則,如漢字按筆畫順序排序。也可能在已有的排序規(guī)則基礎(chǔ)上,加上更多的規(guī)則,如加上一條“英文不區(qū)分大小寫”。(6)字符串確定大小的方法:逐個(gè)比較相應(yīng)位置的字符,先出現(xiàn)大字符的字符串較大。(7)不同類型的數(shù)據(jù)無法正確比較大小。3.4.2
索引索引本質(zhì)上來說,就是一種排序。在已排序的表中查找數(shù)據(jù),通常速度會(huì)更快。索引的作用主要是為了加快數(shù)據(jù)的檢索定位。有時(shí),表中有索引和沒有索引,查詢的性能相差極遠(yuǎn),足以影響用戶的體驗(yàn)。3.4.2
索引圖3-19是索引原理的簡單示意圖。3.4.2
索引實(shí)際上,表上的索引并不是越多越好。通常情況下,只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時(shí),才需要對該列創(chuàng)建索引。索引數(shù)據(jù)會(huì)占用磁盤空間,過度索引可能降低數(shù)據(jù)添加、刪除和更新的速度。不過在多數(shù)情況下,索引所帶來的數(shù)據(jù)檢索速度的優(yōu)勢大大超過它的不足之處。另外,如果列的數(shù)據(jù)存在大量重復(fù),索引的效果將不明顯。3.4.2
索引常用的索引類型有:唯一索引、非唯一索引、主鍵索引等。唯一索引不允許兩行數(shù)據(jù)具有相同的索引值,但允許有空值。如果現(xiàn)有數(shù)據(jù)中存在重復(fù)的鍵值,則只能創(chuàng)建非唯一索引。當(dāng)新數(shù)據(jù)存入使表中的鍵值重復(fù)時(shí),若預(yù)先在該鍵上建有唯一索引,數(shù)據(jù)庫將拒絕接受此數(shù)據(jù)。數(shù)據(jù)庫對于唯一索引和非唯一索引的組織機(jī)制是不同的。定義表時(shí),系統(tǒng)自動(dòng)為主鍵創(chuàng)建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個(gè)值是唯一的。當(dāng)在查詢中使用主鍵索引時(shí),訪問數(shù)據(jù)的速度很快。3.4.2
索引表3.8student數(shù)據(jù)庫中的索引設(shè)計(jì)表索引列索引類型理由studentsstuId主鍵索引作為主鍵,索引自動(dòng)產(chǎn)生。stuName非唯一索引經(jīng)常按姓名查找數(shù)據(jù)。birth非唯一索引經(jīng)常計(jì)算年齡,做與出生年月日相關(guān)的查找。telNo非唯一索引有時(shí)按電話查找數(shù)據(jù)。coursescorId主鍵索引作為主鍵,索引自動(dòng)產(chǎn)生。corName唯一索引常按課程名查找數(shù)據(jù),希望所有課程都有唯一名稱,以示區(qū)分。scstuId,corId主鍵索引作為主鍵,索引自動(dòng)產(chǎn)生。strDate非唯一索引選修時(shí),需經(jīng)常作時(shí)間判斷,限定時(shí)間范圍等。3.4.2
索引為表創(chuàng)建索引的命令格式如下:
CREATE[UNIQUE]INDEX索引名ON表名(列名)[ASC|DESC]其中,UNIQUE為可選參數(shù),表示唯一索引;索引名最好使用有意義的名稱以方便識別;如果基于數(shù)據(jù)表中的單列創(chuàng)建索引,則列名為單個(gè)列,如果基于多列創(chuàng)建索引,則列名包含多個(gè),用逗號隔開;ASC或DESC指定升序或降序排列索引數(shù)據(jù)。3.4.2
索引【例3-9】在student數(shù)據(jù)庫中,為courses表的corName列設(shè)置唯一索引。3.5.1實(shí)施非空約束3.5.2實(shí)施唯一約束3.5實(shí)施約束3.5.3實(shí)施默認(rèn)約束3.5.4實(shí)施用戶自定義約束3.5.
實(shí)施約束約束,是施加在數(shù)據(jù)庫的表上或者表與表之間的一些規(guī)則。約束的作用是保證數(shù)據(jù)庫中的數(shù)據(jù)始終處于正確的狀態(tài)。要注意的是,有實(shí)在的意義的規(guī)則才是我們所需要的,規(guī)則必須在數(shù)據(jù)的有效性、一致性方面發(fā)揮確切有效的作用。3.5.
實(shí)施約束判斷一個(gè)約束是否必要,可根據(jù)以下幾個(gè)原則:1)可減少輸入錯(cuò)誤,保證數(shù)據(jù)的有效性。2)約束能夠滿足業(yè)務(wù)的需求,是用戶提出來的,不是自己硬找出來的。3)當(dāng)指定一個(gè)鍵是主鍵或外鍵時(shí),此處隱含了約束(即實(shí)體完整性和參照完整性)。3.5.1
實(shí)施非空約束如果對表中的列實(shí)施了非空約束,則該列的取值不允許為空值。如果用戶在實(shí)施了非空約束的列上輸入了空值,數(shù)據(jù)庫系統(tǒng)將會(huì)報(bào)錯(cuò)。非空約束使用“notnull”來表示。3.5.1
實(shí)施非空約束【例3-10】對students表的stuName列實(shí)施非空約束。createtablestudents(stuIdchar(9)primarykey,stuNamevarchar(10)notnull,classvarchar(30),sexenum('男','女'),birthdate,telNovarchar(15),Emailvarchar(50),commentvarchar(100));3.5.2
實(shí)施唯一約束如果對表中的列實(shí)施了唯一約束,則該列的取值不允許重復(fù)。如果用戶在實(shí)施了唯一約束的列上輸入了重復(fù)值,數(shù)據(jù)庫系統(tǒng)將會(huì)報(bào)錯(cuò)。實(shí)施了唯一約束的列允許為空,但空值只能出現(xiàn)一次。唯一約束使用“unique”來表示。3.5.2
實(shí)施唯一約束【例3-11】對courses表的corName列實(shí)施唯一約束。createtablecourses(corIdchar(3)primarykey,corNamevarchar(30)unique,periodtinyint,creditdecimal(2,1));3.5.3
實(shí)施默認(rèn)約束如果對表中的列實(shí)施了默認(rèn)約束,則該列下的數(shù)據(jù)如果不輸入數(shù)值,系統(tǒng)將使用指定的默認(rèn)值進(jìn)行填充。默認(rèn)約束使用“default值”來表示。3.5.3
實(shí)施默認(rèn)約束【例3-12】對students表的sex列實(shí)施默認(rèn)約束,如果不輸入數(shù)據(jù),性別默認(rèn)為“男”。createtablestudents(stuIdchar(9)primarykey,stuNamevarchar(10)notnull,classvarchar(30),sexenum('男','女')default'男',birthdate,telNovarchar(15),Emailvarchar(50),commentvarchar(100));3.5.4
實(shí)施用戶自定義約束除對表實(shí)施非空、唯一、默認(rèn)約束外,用戶還可以根據(jù)業(yè)務(wù)邏輯的需要,在數(shù)據(jù)庫中實(shí)施其他自定義的約束。在表3.9student數(shù)據(jù)庫的約束設(shè)計(jì)中,學(xué)生入學(xué)時(shí)年齡不可超過25歲、課程成績的值只能在0-100之間等都屬于用戶自定義約束。用戶自定義約束使用“check(表達(dá)式)”來表示。3.5.4
實(shí)施用戶自定義約束【例3-13】因課程成績實(shí)行百分制,現(xiàn)對sc表的score列實(shí)施約束,使該列的數(shù)據(jù)取值范圍在0—100之間。
altertablescaddcheck(score>=0andscore<=100);
謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門3.1鍵3.2級聯(lián)更新和級聯(lián)刪除3.3表間聯(lián)系第3章
理解數(shù)據(jù)庫相關(guān)概念3.4排序與索引3.5實(shí)施約束3.2級聯(lián)更新和級聯(lián)刪除3.2級聯(lián)更新和級聯(lián)刪除所謂級聯(lián)更新,指在設(shè)置好外鍵的表A和B之間,如果表B的主鍵K中某一數(shù)據(jù)項(xiàng)發(fā)生更改,則數(shù)據(jù)庫會(huì)自動(dòng)更改表A的外鍵F中對應(yīng)的數(shù)據(jù)項(xiàng)(如果存在對應(yīng))。3.2級聯(lián)更新和級聯(lián)刪除所謂級聯(lián)刪除,指如果表B的主鍵K中某一數(shù)據(jù)項(xiàng)被刪除了,則數(shù)據(jù)庫會(huì)自動(dòng)刪除表A的外鍵F中對應(yīng)的數(shù)據(jù)項(xiàng)(如果存在對應(yīng))。3.2級聯(lián)更新和級聯(lián)刪除【例3-8】使用Navicat分別為student數(shù)據(jù)庫中的students表和sc表、courses表和sc表之間的主外鍵關(guān)系設(shè)置級聯(lián)更新和級聯(lián)刪除。謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門3.1鍵3.2級聯(lián)更新和級聯(lián)刪除3.3表間聯(lián)系第3章
理解數(shù)據(jù)庫相關(guān)概念3.4排序與索引3.5實(shí)施約束3.3.1一對一聯(lián)系3.3.2一對多聯(lián)系3.3表間聯(lián)系3.3.3多對多聯(lián)系3.3.1
一對一聯(lián)系如果第一個(gè)表的一條記錄僅關(guān)聯(lián)到第二個(gè)表的一條(或零條)記錄,并且第二個(gè)表的一條記錄也僅關(guān)聯(lián)到第一個(gè)表的一條記錄(注意,此時(shí)必須有一條關(guān)聯(lián)記錄,不能是零條),就稱這對表之間存在一對一的聯(lián)系。這時(shí),第一個(gè)表為父表,第二個(gè)表為子表。3.3.2
一對多聯(lián)系如圖3-15所示,students表中含有“dorNo”這一外鍵,表示宿舍序號,對應(yīng)dormitory表中的主鍵“no”。現(xiàn)實(shí)的情況是,一個(gè)學(xué)生住在一間宿舍,一間宿舍可以住多名學(xué)生,或者一名學(xué)生都不住。表現(xiàn)在表上,對于students表,每條記錄有一個(gè)宿舍序號dorNo;dormitory表(no為主鍵)的一條記錄對應(yīng)學(xué)生表(dorNo為外鍵)零條或多條記錄。這種表間聯(lián)系即為一對多聯(lián)系,其中dormitory表是父表,students表是子表。一對多聯(lián)系是數(shù)據(jù)庫中出現(xiàn)最多、最為重要的表間聯(lián)系。3.3.2
一對多聯(lián)系3.3.3
多對多聯(lián)系如果第一個(gè)表的一條記錄可以關(guān)聯(lián)到第二個(gè)表的一條或多條記錄,并且第二個(gè)表的一條記錄,也可關(guān)聯(lián)到第一個(gè)表的一條或多條記錄,或者更精確地說,第一個(gè)表與第二個(gè)表是一對多,第二個(gè)表與第一個(gè)表也是一對多,就稱這兩個(gè)表之間存在多對多聯(lián)系。3.3.3
多對多聯(lián)系多對多的聯(lián)系難以在數(shù)據(jù)庫中直接表示,一般要轉(zhuǎn)換成兩個(gè)一對多的聯(lián)系。3.3.3
多對多聯(lián)系了解了表間聯(lián)系之后,我們?nèi)绾闻袛鄶?shù)據(jù)庫中存在的多個(gè)表兩兩之間到底有沒有聯(lián)系,又是哪種聯(lián)系呢?可以采用以下的步驟進(jìn)行判斷:
(1)看看兩個(gè)表之間是否存在主外鍵的關(guān)聯(lián),即一個(gè)表的主鍵是否在另外一個(gè)表中出現(xiàn)了。如果不存在,則這兩個(gè)表一般沒有聯(lián)系。如果存在關(guān)聯(lián),則繼續(xù)步驟(2)。
(2)看看主鍵所在表中的一條記錄對應(yīng)外鍵所在表的幾條記錄。如果主鍵表一條記錄僅對應(yīng)外鍵表一條或零條記錄,則這兩個(gè)表之間存在一對一聯(lián)系;如果主鍵表一條記錄對應(yīng)外鍵表多條或零條記錄,則這兩個(gè)表之間存在一對多聯(lián)系。實(shí)際上,一對多的聯(lián)系是數(shù)據(jù)庫中存在最多的表間聯(lián)系。多對多聯(lián)系因?yàn)殡y以在數(shù)據(jù)庫中表達(dá),一般都會(huì)轉(zhuǎn)換成兩個(gè)一對多來表示。謝謝!數(shù)據(jù)庫原理與應(yīng)用快速入門3.1鍵3.2級聯(lián)更新和級聯(lián)刪除3.3表間聯(lián)系第3章
理解數(shù)據(jù)庫相關(guān)概念3.4排序與索引3.5實(shí)施約束3.4.1排序3.4.2索引3.4排序和索引3.4.1
排序在數(shù)據(jù)庫中,常規(guī)的排序規(guī)則如下:(1)數(shù)值型數(shù)據(jù):按值的大小進(jìn)行排序。(2)英文字符:按英文碼表內(nèi)的編碼進(jìn)行排序,如ASCII碼。(3)中文字符:按中文碼表內(nèi)的編碼進(jìn)行排序。表面上看,一般是按拼音的字典順序進(jìn)行排序。(4)英文符號比中文符號小,中文符號比中文字小,而空值是最小的。3.4.1
排序在數(shù)據(jù)庫中,常規(guī)的排序規(guī)則如下:(5)可能在數(shù)據(jù)庫系統(tǒng)中,指定了別的排序規(guī)則,如漢字按筆畫順序排序。也可能在已有的排序規(guī)則基礎(chǔ)上,加上更多的規(guī)則,如加上一條“英文不區(qū)分大小寫”。(6)字符串確定大小的方法:逐個(gè)比較相應(yīng)位置的字符,先出現(xiàn)大字符的字符串較大。(7)不同類型的數(shù)據(jù)無法正確比較大小。3.4.2
索引索引本質(zhì)上來說,就是一種排序。在已排序的表中查找數(shù)據(jù),通常速度會(huì)更快。索引的作用主要是為了加快數(shù)據(jù)的檢索定位。有時(shí),表中有索引和沒有索引,查詢的性能相差極遠(yuǎn),足以影響用戶的體驗(yàn)。3.4.2
索引圖3-19是索引原理的簡單示意圖。3.4.2
索引實(shí)際上,表上的索引并不是越多越好。通常情況下,只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時(shí),才需要對該列創(chuàng)建索引。索引數(shù)據(jù)會(huì)占用磁盤空間,過度索引可能降低數(shù)據(jù)添加、刪除和更新的速度。不過在多數(shù)情況下,索引所帶來的數(shù)據(jù)檢索速度的優(yōu)勢大大超過它的不足之處。另外,如果列的數(shù)據(jù)存在大量重復(fù),索引的效果將不明顯。3.4.2
索引常用的索引類型有:唯一索引、非唯一索引、主鍵索引等。唯一索引不允許兩行數(shù)據(jù)具有相同的索引值,但允許有空值。如果現(xiàn)有數(shù)據(jù)中存在重復(fù)的鍵值,則只能創(chuàng)建非唯一索引。當(dāng)新數(shù)據(jù)存入使表中的鍵值重復(fù)時(shí),若預(yù)先在該鍵上建有唯一索引,數(shù)據(jù)庫將拒絕接受此數(shù)據(jù)。數(shù)據(jù)庫對于唯一索引和非唯一索引的組織機(jī)制是不同的。定義表時(shí),系統(tǒng)自動(dòng)為主鍵創(chuàng)建主鍵索引,主鍵索引是唯一索引的特殊類型。主鍵索引要求主鍵中的每個(gè)值是唯一的。當(dāng)在查詢中使用主鍵索引時(shí),訪問數(shù)據(jù)的速度很快。3.4.2
索引表3.8student數(shù)據(jù)庫中的索引設(shè)計(jì)表索引列索引類型理由studentsstuId主鍵索引作為主鍵,索引自動(dòng)產(chǎn)生。stuName非唯一索引經(jīng)常按姓名查找數(shù)據(jù)。birth非唯一索引經(jīng)常計(jì)算年齡,做與出生年月日相關(guān)的查找。t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)本科(法學(xué))國際法基礎(chǔ)階段測試題及答案
- 初中七年級(化學(xué))2026年上學(xué)期期中測試卷
- 2025-2026年高三歷史(專題復(fù)習(xí))下學(xué)期試題及答案
- 6-融e電競策劃書
- 深度解析(2026)GBT 18375-2024假肢 下肢假肢的結(jié)構(gòu)檢驗(yàn) 要求和試驗(yàn)方法
- 深度解析(2026)《GBT 18266.1-2000體育場所等級的劃分 第1部分保齡球館星級的劃分及評定》(2026年)深度解析
- 深度解析(2026)《GBT 17980.133-2004農(nóng)藥 田間藥效試驗(yàn)準(zhǔn)則(二) 第133部分馬鈴薯脫葉干燥劑試驗(yàn)》
- 深度解析(2026)《GBT 17980.19-2000農(nóng)藥 田間藥效試驗(yàn)準(zhǔn)則(一) 殺菌劑防治水稻葉部病害》
- 深度解析(2026)《GBT 17789-1999在PSTN或二線點(diǎn)對點(diǎn)租用電話型電路上同時(shí)傳送數(shù)據(jù)和數(shù)字化編碼語音信號的規(guī)程》
- 深度解析(2026)《GBT 6115.2-2017電力系統(tǒng)用串聯(lián)電容器 第2部分:串聯(lián)電容器組用保護(hù)設(shè)備》
- 羽毛的作用教學(xué)課件
- 跟腱斷裂護(hù)理查房
- 私域流量培訓(xùn)
- 部編人教版三年級上冊道德與法治全冊教案
- 新疆和田縣多寶山鉛多金屬礦項(xiàng)目環(huán)境影響報(bào)告書
- 2025春季學(xué)期國開電大??啤稒C(jī)械制圖》一平臺(tái)在線形考(形成性任務(wù)1至4)試題及答案
- T/CECS 10348-2023一體化凈水設(shè)備
- 順產(chǎn)側(cè)切醫(yī)院護(hù)理查房
- 框架玻璃幕墻拆除方案
- NPI工程師年終個(gè)人工作總結(jié)述職報(bào)告
- 鶴崗礦業(yè)集團(tuán)峻德煤礦24Mt-a新井設(shè)計(jì)-課程設(shè)計(jì)設(shè)計(jì)
評論
0/150
提交評論