版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
8.1數(shù)據(jù)庫(kù)概述
8.1.1 數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)管理系統(tǒng)1.數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)(DB)是存放數(shù)據(jù)的倉(cāng)庫(kù),只不過(guò)這些數(shù)據(jù)存在一定的關(guān)聯(lián),并按一定的格式存放在計(jì)算機(jī)上。從廣義上講,數(shù)據(jù)不僅包含數(shù)字,還包括了文本、圖像、音頻、視頻等。例如,把學(xué)校的學(xué)生、課程、學(xué)生成績(jī)等數(shù)據(jù)有序地組織并存放在計(jì)算機(jī)內(nèi),就可以構(gòu)成一個(gè)數(shù)據(jù)庫(kù)。因此,數(shù)據(jù)庫(kù)由一些持久的相互關(guān)聯(lián)數(shù)據(jù)的集合組成,并以一定的組織形式存放在計(jì)算機(jī)的存儲(chǔ)介質(zhì)中。2.數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是管理數(shù)據(jù)庫(kù)的系統(tǒng),它按一定的數(shù)據(jù)模型組織數(shù)據(jù)。下一頁(yè)返回8.1數(shù)據(jù)庫(kù)概述
數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫(kù)的安全性和完整性。用戶通過(guò)DBMS訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)庫(kù)管理員也通過(guò)DBMS進(jìn)行數(shù)據(jù)庫(kù)的維護(hù)工作。它可使多個(gè)應(yīng)用程序和用戶用不同的方法在同時(shí)或不同時(shí)刻去建立、修改和詢問(wèn)數(shù)據(jù)庫(kù)。DBMS提供數(shù)據(jù)定義語(yǔ)言(DataDefinitionLanguage,DDL)與數(shù)據(jù)操作語(yǔ)言(DataManipulationLanguage,DML),供用戶定義數(shù)據(jù)庫(kù)的模式結(jié)構(gòu)與權(quán)限約束,實(shí)現(xiàn)對(duì)數(shù)據(jù)的追加、刪除等操作。DBMS應(yīng)提供如下功能:①數(shù)據(jù)定義功能,可定義數(shù)據(jù)庫(kù)中的數(shù)據(jù)對(duì)象。②數(shù)據(jù)操縱功能,可對(duì)數(shù)據(jù)庫(kù)表進(jìn)行基本操作,如插入、刪除、修改、查詢。③數(shù)據(jù)的完整性檢查功能,保證用戶輸入的數(shù)據(jù)應(yīng)滿足相應(yīng)的約束條件。④數(shù)據(jù)庫(kù)的安全保護(hù)功能,保證只有賦予權(quán)限的用戶才能訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。上一頁(yè)下一頁(yè)返回8.1數(shù)據(jù)庫(kù)概述
⑤數(shù)據(jù)庫(kù)的并發(fā)控制功能,使多個(gè)應(yīng)用程序可在同一時(shí)刻并發(fā)地訪問(wèn)數(shù)據(jù)庫(kù)的數(shù)據(jù)。⑥數(shù)據(jù)庫(kù)系統(tǒng)的故障恢復(fù)功能,使數(shù)據(jù)庫(kù)運(yùn)行出現(xiàn)故障時(shí)進(jìn)行數(shù)據(jù)庫(kù)恢復(fù),以保證數(shù)據(jù)庫(kù)可靠運(yùn)行。⑦在網(wǎng)絡(luò)環(huán)境下訪問(wèn)數(shù)據(jù)庫(kù)的功能。⑧方便、有效地存取數(shù)據(jù)庫(kù)信息的接口和工具。編程人員通過(guò)程序開(kāi)發(fā)工具與數(shù)據(jù)庫(kù)的接口編寫數(shù)據(jù)庫(kù)應(yīng)用程序。數(shù)據(jù)庫(kù)管理員(DataBaseAdministrator,DBA)通過(guò)提供的工具對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理。數(shù)據(jù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)與操作數(shù)據(jù)庫(kù)的應(yīng)用程序,加上支撐它們的硬件平臺(tái)、軟件平臺(tái)和與數(shù)據(jù)庫(kù)有關(guān)的人員一起構(gòu)成了一個(gè)完整的數(shù)據(jù)庫(kù)系統(tǒng)。圖8-1描述了數(shù)據(jù)庫(kù)系統(tǒng)的構(gòu)成。上一頁(yè)下一頁(yè)返回8.1數(shù)據(jù)庫(kù)概述
8.1.2 數(shù)據(jù)模型數(shù)據(jù)庫(kù)管理系統(tǒng)根據(jù)數(shù)據(jù)模型對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和管理。數(shù)據(jù)庫(kù)管理系統(tǒng)采用的數(shù)據(jù)模型主要有層次模型、網(wǎng)狀模型和關(guān)系模型。關(guān)系模型是以二維表格(關(guān)系表)的形式組織數(shù)據(jù)庫(kù)中的數(shù)據(jù),這和日常生活中經(jīng)常用到的各種表格形式上是一致的,一個(gè)數(shù)據(jù)庫(kù)中可以有若干張表。表格中的一行稱為一個(gè)記錄,一列稱為一個(gè)字段,每列的標(biāo)題稱為字段名。如果給每個(gè)關(guān)系表取一個(gè)名字,則有n個(gè)字段的關(guān)系表的結(jié)構(gòu)可表示為:關(guān)系表名(字段名1,…,字段名n),通常把關(guān)系表的結(jié)構(gòu)稱為關(guān)系模式。在關(guān)系表中,如果一個(gè)字段或幾個(gè)字段組合的值可唯一標(biāo)志其對(duì)應(yīng)記錄,則稱該字段或字段組合為碼。數(shù)據(jù)庫(kù)與數(shù)據(jù)表關(guān)系如圖8-2所示。上一頁(yè)下一頁(yè)返回8.1數(shù)據(jù)庫(kù)概述
常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)有SQLServer、DB2、Sybase、Oracle、MySQL和Access。8.1.3 SQL語(yǔ)言SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語(yǔ)言)是一種數(shù)據(jù)庫(kù)查詢語(yǔ)言和程序設(shè)計(jì)語(yǔ)言。它是一種關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言,主要用于管理數(shù)據(jù)庫(kù)中的數(shù)據(jù),如存取數(shù)據(jù)、查詢數(shù)據(jù)、更新數(shù)據(jù)等。SQL是一種介于關(guān)系代數(shù)和關(guān)系演算之間的語(yǔ)言,具有豐富的查詢功能,同時(shí)具有數(shù)據(jù)定義和數(shù)據(jù)控制功能,是集數(shù)據(jù)定義、數(shù)據(jù)查詢和數(shù)據(jù)控制于一體的關(guān)系數(shù)據(jù)語(yǔ)言。目前,許多關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)都支持SQL語(yǔ)言,如SQLServer、DB2、Sybase、Oracle、MySQL和Access等。SQL語(yǔ)言簡(jiǎn)潔、方便、實(shí)用,為完成其核心功能,只用了6個(gè)詞:SELECT、CREATE、INSERT、UPDATE、DELETE、GRANT(REVOKE)。目前,SQL已成為應(yīng)用最廣的關(guān)系型數(shù)據(jù)庫(kù)語(yǔ)言。上一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)8.2.1 MySQL數(shù)據(jù)庫(kù)簡(jiǎn)介MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQLAB公司。目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)。與其他的大型數(shù)據(jù)庫(kù)相比,MySQL還有一些不足之處,但是這絲毫也沒(méi)有降低它受歡迎的程度。對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),MySQL提供的功能已經(jīng)綽綽有余,并且由于MySQL是開(kāi)放源碼軟件,因此可以大大降低總體擁有成本。下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)大概是由于PHP開(kāi)發(fā)者特別鐘情于MySQL,因此才在PHP中建立了MySQL支持。在PHP中,用來(lái)操作MySQL的函數(shù)一直是PHP的標(biāo)準(zhǔn)內(nèi)置函數(shù)。開(kāi)發(fā)者只需要用PHP寫下幾行代碼,就可以輕松連接到MySQL數(shù)據(jù)庫(kù)。PHP還提供了大量的函數(shù)來(lái)對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行操作,可以說(shuō),用PHP操作MySQL數(shù)據(jù)庫(kù)極為簡(jiǎn)單和高效,這也使得PHP+MySQL成為當(dāng)今最為流行的Web開(kāi)發(fā)語(yǔ)言與數(shù)據(jù)庫(kù)搭配之一。目前Internet上流行的網(wǎng)站構(gòu)架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作為操作系統(tǒng),Apache作為Web服務(wù)器,MySQL作為數(shù)據(jù)庫(kù),PHP作為服務(wù)器端腳本解釋器。由于這4個(gè)軟件都遵循GPL的開(kāi)放源碼軟件,因此,使用這種方式不用花一分錢就可以建立起一個(gè)穩(wěn)定、免費(fèi)的網(wǎng)站系統(tǒng)。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)MySQL數(shù)據(jù)庫(kù)的特點(diǎn)主要有以下幾個(gè)方面:①使用核心線程的完全多線程服務(wù),這意味著可以采用多CPU體系結(jié)構(gòu)。②可運(yùn)行在不同平臺(tái)。③使用C和C++編寫,并使用多種編譯器進(jìn)行測(cè)試,保證了源代碼的可移植性。④支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多種操作系統(tǒng)。⑤為多種編程語(yǔ)言提供了API。這些編程語(yǔ)言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。⑥支持多線程,充分利用CPU資源。⑦優(yōu)化的SQL查詢算法,可有效地提高查詢速度。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)⑧既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫(kù)而嵌入其他的軟件中提供多語(yǔ)言支持。常見(jiàn)的編碼如中文的GB2312、BIG5,日文的Shift_JIS等,都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。⑨提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫(kù)連接途徑。⑩提供可用于管理、檢查、優(yōu)化數(shù)據(jù)庫(kù)操作的管理工具。?可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)。2008年1月16日美國(guó)著名軟件開(kāi)發(fā)商SUN公司宣布收購(gòu)MySQLAB公司。通過(guò)這兩個(gè)公司的強(qiáng)強(qiáng)結(jié)合,MySQL的功能越來(lái)越完善,從而在數(shù)據(jù)庫(kù)領(lǐng)域發(fā)揮了更大的影響力。本書(shū)要介紹的是MySQL5.5。MySQL支持SQL標(biāo)準(zhǔn),但也進(jìn)行了相應(yīng)的擴(kuò)展。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)8.2.2 啟動(dòng)和關(guān)閉MySQL服務(wù)器1.MySQL數(shù)據(jù)庫(kù)服務(wù)的開(kāi)啟與關(guān)閉在WAMP管理菜單中單擊“MySQL”菜單項(xiàng),彈出如圖8-3所示的菜單?!癝tart/ResumeService”用于開(kāi)啟MySQL服務(wù)器;菜單項(xiàng)“StopService”用于關(guān)閉MySQL服務(wù)器。菜單項(xiàng)“StopService”處于灰色狀態(tài),表明當(dāng)前的菜單項(xiàng)MySQL服務(wù)器正處于關(guān)閉狀態(tài)。2.查看系統(tǒng)服務(wù)打開(kāi)Windows系統(tǒng)的“服務(wù)”信息,從中可以查看到MySQL服務(wù)器的工作狀態(tài),如圖8-4所示。3.進(jìn)入與退出MySQL管理控制臺(tái)MySQL管理控制臺(tái)是管理MySQL數(shù)據(jù)庫(kù)的控制中心,只有進(jìn)入MySQL管理控制臺(tái)后,才能管理MySQL數(shù)據(jù)庫(kù)。進(jìn)入MySQL管理控制臺(tái)之前,必須先啟動(dòng)MySQL數(shù)據(jù)庫(kù)服務(wù)。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)(1)進(jìn)入MySQL管理控制臺(tái)在WAMP集成環(huán)境中進(jìn)入MySQL控制臺(tái),可通過(guò)如圖8-5所示菜單項(xiàng)進(jìn)入。輸入正確的MySQL根用戶的登錄密碼,即可進(jìn)入MySQL管理控制臺(tái),如圖8-6所示。此時(shí)用戶即可輸入正確的MySQL命令進(jìn)行操作。也可以采用以下方法進(jìn)入MySQL管理控制臺(tái)。①執(zhí)行“開(kāi)始”→“運(yùn)行”命令,打開(kāi)“運(yùn)行”對(duì)話框,輸入進(jìn)入DOS命令窗口的命令。代碼如下:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)②進(jìn)入DOS命令窗口后,首先要將文件夾切換到MySQL的主程序文件夾,例如,C:\ProgramFiles\wamp\MySQL\bin,輸入目錄切換命令。③輸入進(jìn)入MySQL管理控制臺(tái)的命令。語(yǔ)法如下:按Enter鍵進(jìn)入MySQL管理控制臺(tái),如圖8-7所示。(2)退出MySQL管理控制臺(tái)退出MySQL管理控制臺(tái)非常簡(jiǎn)單,只需要在MySQL命令行中輸入“\q”或“quit”命令即可。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)8.2.3 操作數(shù)據(jù)庫(kù)1.創(chuàng)建數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)就是在數(shù)據(jù)庫(kù)系統(tǒng)中劃分一塊存儲(chǔ)數(shù)據(jù)的空間。在MySQL中,創(chuàng)建數(shù)據(jù)庫(kù)的基本語(yǔ)法格式如下所示:【例8-1】創(chuàng)建一個(gè)學(xué)生管理數(shù)據(jù)庫(kù)XSGL,執(zhí)行結(jié)果如圖8-8所示:2.查看數(shù)據(jù)庫(kù)為了驗(yàn)證數(shù)據(jù)庫(kù)系統(tǒng)中是否創(chuàng)建了名稱為XSGL的數(shù)據(jù)庫(kù),需要查看數(shù)據(jù)庫(kù)。在MySQL中,查看數(shù)據(jù)庫(kù)的SQL語(yǔ)句如下所示:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-2】使用SHOWDATABASES語(yǔ)句查看已經(jīng)存在的數(shù)據(jù)庫(kù),執(zhí)行結(jié)果如圖8-9所示。該語(yǔ)句可顯示出MySQL中的所有數(shù)據(jù)庫(kù)。從上面顯示結(jié)果可見(jiàn),XSGL數(shù)據(jù)庫(kù)已創(chuàng)建成功。3.打開(kāi)數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)后,必須打開(kāi)數(shù)據(jù)庫(kù)才能進(jìn)一步操作數(shù)據(jù)庫(kù)。語(yǔ)法格式:4.刪除數(shù)據(jù)庫(kù)刪除數(shù)據(jù)庫(kù)是將數(shù)據(jù)庫(kù)系統(tǒng)中已經(jīng)存在的數(shù)據(jù)庫(kù)刪除。成功刪除數(shù)據(jù)庫(kù)后,數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)都將被清除,原來(lái)分配的空間也將被回收。如要?jiǎng)h除已經(jīng)創(chuàng)建的數(shù)據(jù)庫(kù),可使用DROPDATABASE命令。語(yǔ)法格式:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)8.2.4 MySQL數(shù)據(jù)類型1.整數(shù)類型根據(jù)數(shù)值取值范圍的不同,MySQL中的整數(shù)類型可分為5種,分別是TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,表8-1列舉了MySQL不同整數(shù)類型所對(duì)應(yīng)的字節(jié)大小和取值范圍。從表8-1中可以看出,不同整數(shù)類型所占用的字節(jié)數(shù)和取值范圍都是不同的。
2.浮點(diǎn)數(shù)類型浮點(diǎn)型也稱為近似數(shù)值型。有兩種浮點(diǎn)數(shù)據(jù)類型:?jiǎn)尉龋‵LOAT)和雙精度(DOUBLE)。兩者通常都使用科學(xué)計(jì)數(shù)法表示數(shù)據(jù),即形為尾數(shù)E階數(shù),如6.5432E20、-3.92E10、1.237649E-9等。表8-2列舉了MySQL中浮點(diǎn)數(shù)類型所對(duì)應(yīng)的字節(jié)大小及其取值范圍。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)3.精確數(shù)值型精確數(shù)值型由整數(shù)部分和小數(shù)部分構(gòu)成,其所有的數(shù)字都是有效位,能夠以完整的精度存儲(chǔ)十進(jìn)制數(shù)。精確數(shù)值型包括DECIMAL、NUMERIC兩類。從功能上說(shuō),兩者完全等價(jià),兩者的唯一區(qū)別在于DECIMAL不能用于帶有XHENTITY關(guān)鍵字的列。在MySQL中,定義DECIMAL類型的方式如下所示:其中M表示十進(jìn)制數(shù)字總的個(gè)數(shù),D表示小數(shù)點(diǎn)后面數(shù)字的位數(shù)。例如:DECIMAL(5,2)的取值范圍為-999.99~999.99。4.日期與時(shí)間類型為了方便在數(shù)據(jù)庫(kù)中存儲(chǔ)日期和時(shí)間,MySQL提供了表示日期和時(shí)間的數(shù)據(jù)類型,分別是YEAR、DATE、TIME、DATETIME和TIMESTAMP。表8-3列舉了這些MySQL中日期和時(shí)間數(shù)據(jù)類型所對(duì)應(yīng)的字節(jié)數(shù)、取值范圍、日期格式及用途。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)需要注意的是,如果插入的數(shù)值不合法,系統(tǒng)會(huì)自動(dòng)將對(duì)應(yīng)的零值插入數(shù)據(jù)庫(kù)中。為了讓大家更好地學(xué)習(xí)日期和時(shí)間類型,接下來(lái)對(duì)表8-3中的類型進(jìn)行詳細(xì)講解,具體如下:(1)YEAR類型YEAR類型用于表示年份,在MySQL中,可以使用以下三種格式指定YEAR類型的值:①使用4位字符串或數(shù)字表示,范圍為‘1901’~‘2155’或1901~2155。②使用2位字符串表示,范圍為‘00’~‘99’。③使用2位數(shù)字表示,范圍為1~99。需要注意的是,當(dāng)使用YEAR類型時(shí),一定要區(qū)分‘0’和0。因?yàn)樽址袷降摹?’表示的是YEAR值是2000,而數(shù)字格式的0表示的YEAR值是0000。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)(2)DATE類型DATE類型用于表示日期值,不包含時(shí)間部分。在MySQL中,可以使用以下四種格式指定DATE類型的值:①以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示。②以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示。③以YY-MM-DD或者YYMMDD數(shù)字格式表示。④使用CURRENT_DATE或者NOW()表示當(dāng)前系統(tǒng)日期。(3)TIME類型TIME類型用于表示時(shí)間值,它的顯示形式一般為HH:MM:SS,其中,HH表示小時(shí),MM表示分,SS表示秒。在MySQL中,可以使用以下三種格式指定TIME類型的值:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)①以‘DHH:MM:SS’字符串格式表示。②以‘HHMMSS’字符串格式或者HHMMSS數(shù)字格式表示。③使用CURRENT_TIME或NOW()輸入當(dāng)前系統(tǒng)時(shí)間。(4)DATETIME類型DATETIME類型用于表示日期和時(shí)間,它的顯示形式為‘YYYY-MM-DDHH:MM:SS’,其中,YYYY表示年,MM表示月,DD表示日,HH表示小時(shí),MM表示分,SS表示秒。在MySQL中,可以使用以下四種格式指定DATETIME類型的值:①以‘YYYY-MM-DDHH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的日期和時(shí)間,取值范圍為‘1000-01-0100:00:00’~‘9999-12-323:59:59’。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)②以‘YY-MM-DDHH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期和時(shí)間,其中YY表示年,取值范圍為‘00’~‘99’。③以YYYYMMDDHHMMSS或者YYMMDDHHMMSS數(shù)字格式表示的日期和時(shí)間。④使用NOW來(lái)輸入當(dāng)前系統(tǒng)的日期和時(shí)間。5.字符串和二進(jìn)制類型為了存儲(chǔ)字符串、圖片和聲音等數(shù)據(jù),MySQL提供了字符串和二進(jìn)制類型,表8-4列舉了MySQL中的字符串和二進(jìn)制類型。表8-4列舉的字符串和二進(jìn)制類型中,不同數(shù)據(jù)類型具有不同的特點(diǎn),接下來(lái)針對(duì)這些數(shù)據(jù)類型進(jìn)行詳細(xì)講解,具體如下:(1)CHAR和VARCHAR類型CHAR和VARCHAR類型都用來(lái)表示字符串?dāng)?shù)據(jù)的,不同的是,VARCHAR可以存儲(chǔ)可變長(zhǎng)度的字符串。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)在MySQL中,定義CHAR和VARCHAR類型的方式如下所示:在上述定義方式中,M指的是字符串的最大長(zhǎng)度。為了幫助大家更好地理解CHAR和VARCHAR之間的區(qū)別,接下來(lái)以CHAR(4)和VARCHAR(4)為例進(jìn)行說(shuō)明,具體見(jiàn)表8-5。從表8-5中可以看出,當(dāng)數(shù)據(jù)為CHAR(4)類型時(shí),不管插入值的長(zhǎng)度是多少,所占用的存儲(chǔ)空間都是4個(gè)字節(jié),而VARCHAR(4)所對(duì)應(yīng)的數(shù)據(jù)所占用的字節(jié)數(shù)為實(shí)際長(zhǎng)度加1。(2)BINARY和VARBINARY類型BINARY和VARBINARY類型類似于CHAR和VARCHAR,不同的是,它們所表示的是二進(jìn)制數(shù)據(jù)。定義BINARY和VARBINARY類型的方式如下所示:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)需要注意的是,BINARY類型的長(zhǎng)度是固定的,如果數(shù)據(jù)的長(zhǎng)度不足最大長(zhǎng)度,將在數(shù)據(jù)的后面用“\0”補(bǔ)齊,最終達(dá)到指定長(zhǎng)度。(3)TEXT類型TEXT類型用于表示大文本數(shù)據(jù),例如,文章內(nèi)容、評(píng)論等,它的類型分為四種,具體見(jiàn)表8-6。(4)BLOB類型BLOB類型是一種特殊的二進(jìn)制類型,它用于表示數(shù)據(jù)量很大的二進(jìn)制數(shù)據(jù),例如圖片、PDF文檔等。BLOB類型分為四種,具體見(jiàn)表8-7。需要注意的是,BLOB類型與TEXT類型很相似,但BLOB類型數(shù)據(jù)是根據(jù)二進(jìn)制編碼進(jìn)行比較和排序的,而TEXT類型數(shù)據(jù)是根據(jù)文本模式進(jìn)行比較和排序的。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)(5)BIT類型BIT類型用于表示二進(jìn)制數(shù)據(jù)。定義BIT類型的基本語(yǔ)法格式如下所示:在上述格式中,M用于表示每個(gè)值的位數(shù),范圍為1~64。需要注意的是,如果分配的BIT(M)類型的數(shù)據(jù)長(zhǎng)度小于M,將在數(shù)據(jù)的左邊用0補(bǔ)齊。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)8.2.5 操作MySQL數(shù)據(jù)表1.創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表的實(shí)質(zhì)就是定義表結(jié)構(gòu)和列的屬性。需要注意的是,在操作數(shù)據(jù)表之前,應(yīng)該使用“USE數(shù)據(jù)庫(kù)名”指定操作是在哪個(gè)數(shù)據(jù)庫(kù)中進(jìn)行,否則會(huì)拋出“Nodatabaseselected”錯(cuò)誤。創(chuàng)建數(shù)據(jù)表的基本語(yǔ)法格式如下所示:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-3】在XSGL數(shù)據(jù)庫(kù)中創(chuàng)建XSXX(學(xué)生信息)數(shù)據(jù)表。內(nèi)容包括學(xué)號(hào)、姓名、性別、年齡、出生日期、入學(xué)總分。命令如下:輸入的命令及運(yùn)行的結(jié)果如圖8-10所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)2.顯示數(shù)據(jù)庫(kù)中的表若要顯示出當(dāng)前數(shù)據(jù)庫(kù)中所包含的表,可使用SHOWTABLES命令。語(yǔ)法格式:【例8-4】顯示XSGL數(shù)據(jù)庫(kù)中包含的表。輸入的命令及顯示的結(jié)果如圖8-11所示。3.查看表結(jié)構(gòu)查看表結(jié)構(gòu)命令能夠顯示出指定數(shù)據(jù)表的結(jié)構(gòu)定義。語(yǔ)法格式:【例8-5】查看XSGL數(shù)據(jù)庫(kù)中XSXX表的結(jié)構(gòu)。輸入的命令及顯示結(jié)果如圖8-12所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)4.復(fù)制數(shù)據(jù)表若要將已創(chuàng)建的數(shù)據(jù)表復(fù)制為新表,可使用復(fù)制數(shù)據(jù)表命令。語(yǔ)法格式:使用LIKE關(guān)鍵字創(chuàng)建一個(gè)與“舊表”相同結(jié)構(gòu)的“新表”,列名、數(shù)據(jù)類型等都將被復(fù)制,但是表的內(nèi)容不會(huì)復(fù)制,因此創(chuàng)建的新表是一個(gè)空表?!纠?-6】創(chuàng)建一個(gè)與XSXX表結(jié)構(gòu)完全相同的數(shù)據(jù)表XSXX1。輸入的命令及結(jié)果如圖8-13所示。5.刪除數(shù)據(jù)表刪除數(shù)據(jù)表是指刪除數(shù)據(jù)庫(kù)中已存在的表,在刪除數(shù)據(jù)表的同時(shí),數(shù)據(jù)表中存儲(chǔ)的數(shù)據(jù)都將被刪除。在MySQL中,直接使用DROPTABLE語(yǔ)句就可以刪除沒(méi)有被其他表關(guān)聯(lián)的數(shù)據(jù)表,其基本的語(yǔ)法格式如下所示:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-7】刪除已創(chuàng)建的數(shù)據(jù)表XSXX1。輸入的命令及運(yùn)行結(jié)果如圖8-14所示。6.表的約束為了防止數(shù)據(jù)表中插入錯(cuò)誤的數(shù)據(jù),在MySQL中,定義了一些維護(hù)數(shù)據(jù)庫(kù)完整性的規(guī)則,即表的約束。表8-8列舉了常見(jiàn)的表的約束。表8-8列舉的約束條件都是針對(duì)表中字段進(jìn)行限制的,從而保證了數(shù)據(jù)表中數(shù)據(jù)的正確性和唯一性。(1)主鍵約束在MySQL中,為了快速查找表中的某條信息,可以通過(guò)設(shè)置主鍵來(lái)實(shí)現(xiàn)。主鍵約束是通過(guò)PRIMARYKEY定義的,它可以唯一標(biāo)識(shí)表中的記錄,這就好比身份證可以用來(lái)標(biāo)識(shí)人的身份一樣。在MySQL中,主鍵約束分為兩種,具體如下:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)1)單字段主鍵單字段主鍵指的是由一個(gè)字段構(gòu)成的主鍵,其基本的語(yǔ)法格式如下所示:字段名數(shù)據(jù)類型 PRIMARYKEY上述SQL語(yǔ)句執(zhí)行后,XSCJ表中創(chuàng)建了XH、XM和CJ三個(gè)字段,其中,XH字段是主鍵。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)2)多字段主鍵多字段主鍵指的是多個(gè)字段組合而成的主鍵,其基本的語(yǔ)法格式如下所示:PRIMARYKEY(字段名1,字段名2,…,字段名n)XH和KCH兩個(gè)字段組合可以唯一確定一條記錄。需要注意的是,每個(gè)數(shù)據(jù)表中最多只能有一個(gè)主鍵約束,定義為PRIMARYKEY的字段不能有重復(fù)值且不能為NULL值。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)(2)非空約束非空約束指的是字段的值不能為NULL,在MySQL中,非空約束是通過(guò)NOTNULL定義的,其基本的語(yǔ)法格式如下所示:(3)唯一約束唯一約束用于保證數(shù)據(jù)表中字段的唯一性,即表中字段的值不能重復(fù)出現(xiàn)。唯一約束是通過(guò)UNIQUE定義的,其基本的語(yǔ)法格式如下所示:(4)默認(rèn)約束默認(rèn)約束用于給數(shù)據(jù)表中的字段指定默認(rèn)值,即當(dāng)在表中插入一條新記錄時(shí),如果沒(méi)有給這個(gè)字段賦值,那么,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)為這個(gè)字段插入默認(rèn)值。默認(rèn)值是通過(guò)DEFAULT關(guān)鍵字定義的。默認(rèn)約束基本的語(yǔ)法格式如下所示:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-10】創(chuàng)建一個(gè)數(shù)據(jù)表BJ(班級(jí)表),將表中的BH(班號(hào))字段設(shè)置為唯一約束,BM(班名)字段設(shè)置為非空約束,RS(人數(shù))字段設(shè)置默認(rèn)值為30。SQL語(yǔ)句如下:需要注意的是,在同一個(gè)數(shù)據(jù)表中可以定義多個(gè)非空字段、唯一約束、默認(rèn)值約束。8.2.6 操作數(shù)據(jù)表數(shù)據(jù)1.插入表數(shù)據(jù)創(chuàng)建了數(shù)據(jù)庫(kù)和表之后,下一步就是向表中插入數(shù)據(jù)。通過(guò)INSERT上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)語(yǔ)句可以向表中插入一行或多行數(shù)據(jù)。其語(yǔ)法格式如下所示:字段名1,字段名2,…”表示數(shù)據(jù)表中的字段名稱;“值1,值2,…”表示每個(gè)字段的值,每個(gè)值的順序、類型必須與對(duì)應(yīng)的字段相匹配。(1)為表中所有字段添加數(shù)據(jù)向表中添加所有字段值時(shí),需在表名后列出表的所有字段名,或只寫表名而省略所有字段名,此時(shí)VALUES后面需按字段順序給出所有對(duì)應(yīng)的值?!纠?-11】向XSXX表中添加一條新記錄,記錄中XH字段的值為210001,XM字段的值為“張三”,XB字段的值為“男”,NL字段值為19,CSRQ字段值為“1998/5/4”,RXZF字段值為350。輸入的命令及運(yùn)行結(jié)果如圖8-15所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)需要注意的是,使用此方式添加記錄時(shí),表名后的字段順序可以與其在表中定義的順序不一致,它們只需要與VALUES中值的順序一致即可。也可采用下面的命令格式輸入新記錄,為所有字段添加數(shù)據(jù):此時(shí)VALUES中值的順序必須與表中字段定義的順序一致,否則可能會(huì)因?qū)?yīng)數(shù)據(jù)類型不匹配而出錯(cuò)。(2)為表中部分字段添加數(shù)據(jù)為表的指定字段添加數(shù)據(jù),就是在INSERT語(yǔ)句中只向部分字段中添加值,而其他字段的值為表定義時(shí)的默認(rèn)值?!纠?-12】向BJ表中添加一條新記錄,BH為101,BM為“信息G171”,RS取默認(rèn)值。輸入的命令及運(yùn)行結(jié)果如圖8-16所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)在上述語(yǔ)法格式中,每個(gè)值的順序、類型必須與對(duì)應(yīng)的字段相匹配。需要注意的是,如果某個(gè)字段在定義時(shí)添加了非空約束,但沒(méi)有添加default約束,那么插入新記錄時(shí)就必須為該字段賦值,否則數(shù)據(jù)庫(kù)系統(tǒng)會(huì)提示錯(cuò)誤。(3)同時(shí)添加多條記錄在MySQL中提供了使用一條INSERT語(yǔ)句同時(shí)添加多條記錄的功能?!纠?-13】向XSXX表中添加兩條新記錄。輸入的命令及運(yùn)行結(jié)果如圖8-17所示。為了驗(yàn)證表中記錄是否插入成功,可使用SELECT語(yǔ)句查看,如圖8-18所示。
SELECT語(yǔ)句的具體用法將在后面詳述。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)2.修改表數(shù)據(jù)向表中插入數(shù)據(jù)后,如要修改表中的數(shù)據(jù),可以使用UPDATE語(yǔ)句。語(yǔ)法格式:在上述語(yǔ)法格式中,“字段名1”“字段名2”用于指定要更新的字段名稱;“值1”“值2”用于表示字段更新的新數(shù)據(jù);“WHERE條件表達(dá)式”是可選的,用于指定更新數(shù)據(jù)需要滿足的條件。UPDATE語(yǔ)句可以更新表中的部分?jǐn)?shù)據(jù)和全部數(shù)據(jù),下面就對(duì)這兩種情況進(jìn)行講解:(1)UPDATE更新部分?jǐn)?shù)據(jù)更新部分?jǐn)?shù)據(jù)是指根據(jù)指定條件更新表中的某一條或者某幾條記錄,需要使用WHERE子句來(lái)指定更新記錄的條件。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-14】更新XSXX表中XH字段值為“210001”的記錄,將記錄中的XM字段的值更改為‘張華’,RXZF字段的值更改為355。輸入的命令及運(yùn)行結(jié)果如圖8-19所示。從查詢結(jié)果可以看到,XH字段值為210001的記錄發(fā)生了更新,記錄中XM字段的值變?yōu)椤畯埲A’,RXZF字段的值變?yōu)?50。如果表中有多條記錄滿足WHERE子句中的條件表達(dá)式,則滿足條件的記錄都會(huì)發(fā)生更新。(2)UPDATE更新全部數(shù)據(jù)在UPDATE語(yǔ)句中如果沒(méi)有使用WHERE子句,則會(huì)將表中所有記錄的指定字段都進(jìn)行更新?!纠?-15】將XSXX表中所有記錄的RXZF都減少5分。輸入的命令及運(yùn)行結(jié)果如圖8-20所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)3.刪除表數(shù)據(jù)MySQL中使用DELETE語(yǔ)句來(lái)刪除表中的記錄,其語(yǔ)法格式如下所示:DELETE的表;WHERE子句為可選參數(shù),用于指定刪除的條件,滿足條件的記錄會(huì)被刪除。DELETE語(yǔ)句可以刪除表中的部分?jǐn)?shù)據(jù)和全部數(shù)據(jù),下面就對(duì)這兩種情況進(jìn)行講解:(1)DELETE刪除部分?jǐn)?shù)據(jù)刪除部分?jǐn)?shù)據(jù)是指根據(jù)指定條件刪除表中的某一條或者某幾條記錄,需要使用WHERE子句來(lái)指定刪除記錄的條件。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-16】在XSXX表中,刪除XM字段值為“趙五”的記錄。輸入刪除命令,然后查詢刪除后的結(jié)果,如圖8-21所示。在執(zhí)行刪除操作的表中,如果有多條記錄滿足WHERE子句中的條件表達(dá)式,則滿足條件的記錄都會(huì)被刪除。(2)DELETE刪除全部數(shù)據(jù)在DELETE語(yǔ)句中如果沒(méi)有使用WHERE子句,則會(huì)將表中的所有記錄都刪除?!纠?-17】刪除XSXX表中的所有記錄。輸入刪除命令,然后查看刪除后的結(jié)果,如圖8-22所示。從查詢結(jié)果可以看到記錄為空,說(shuō)明表中所有的記錄被成功刪除。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)4.顯示表內(nèi)容使用數(shù)據(jù)庫(kù)和表的主要目的是存儲(chǔ)數(shù)據(jù),以便在需要時(shí)進(jìn)行檢索、統(tǒng)計(jì)或組織輸出,通過(guò)SQL的SELECT語(yǔ)句可以從表中迅速、方便地檢索數(shù)據(jù)。SELECT語(yǔ)句可以從一個(gè)或多個(gè)表中選取特定的行和列,結(jié)果通常是生成一個(gè)臨時(shí)表。在執(zhí)行過(guò)程中,系統(tǒng)根據(jù)用戶的標(biāo)準(zhǔn)從數(shù)據(jù)庫(kù)中選出匹配的行和列,并將結(jié)果放到臨時(shí)的表中。其語(yǔ)法格式如下:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)說(shuō)明:①“字段名1,字段名2,…”表示從表中查詢的指定字段,星號(hào)(“*”)通配符表示表中所有字段,兩者為互斥關(guān)系,任選其一。②“DISTINCT”是可選參數(shù),用于剔除查詢結(jié)果中重復(fù)的數(shù)據(jù)。③“[FROM表1[,表2]…”表示從指定的表中查詢數(shù)據(jù)。④“WHERE”是可選參數(shù),用于指定查詢條件。⑤“GROUPBY”是可選參數(shù),用于將查詢結(jié)果按照指定字段進(jìn)行分組,“HAVING”也是可選參數(shù),用于對(duì)分組后的結(jié)果進(jìn)行過(guò)濾。⑥“ORDERBY”是可選參數(shù),用于將查詢結(jié)果按照指定字段進(jìn)行排序。排序方式由參數(shù)ASC或DESC控制,其中ASC表示按升序進(jìn)行排列,DESC表示按降序進(jìn)行排列。如果不指定參數(shù),默認(rèn)為升序排列。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)⑦“LIMIT”是可選參數(shù),用于限制查詢結(jié)果的數(shù)量。LIMIT后面可以跟2個(gè)參數(shù),第一個(gè)參數(shù)“OFFSET”表示偏移量,如果偏移量為0,則從查詢結(jié)果的第一條記錄開(kāi)始,偏移量為1,則從查詢結(jié)果的中第二條記錄開(kāi)始,依此類推?!癘FFSET”為可選值,如果不指定,其默認(rèn)值為0。第二個(gè)參數(shù)“記錄數(shù)”表示返回查詢記錄的條數(shù)。(1)選擇字段列表1)在SELECT語(yǔ)句中指定所有字段在SELECT語(yǔ)句中列出所有字段名來(lái)查詢表中的數(shù)據(jù)。首先在XSXX表中插入相關(guān)記錄,語(yǔ)句如下:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-18】查詢XSXX表中的所有記錄的所有信息。輸入的語(yǔ)句及運(yùn)行結(jié)果如圖8-23所示。從查詢結(jié)果可以看出,SELECT語(yǔ)句成功地查出了表中所有字段的數(shù)據(jù)。需要注意的是,在SELECT語(yǔ)句的查詢字段列表中,字段的順序是可以改變的,無(wú)須按照其表中定義的順序進(jìn)行排列。例如,在SELECT語(yǔ)句中將XM字段放在查詢列表的最后一列,則執(zhí)行結(jié)果中XM字段將在最后一列顯示。2)在SELECT語(yǔ)句中使用星號(hào)(“*”)通配符代替所有字段在SELECT語(yǔ)句中,可使用星號(hào)(“*”)通配符代替所有字段來(lái)查詢表中的數(shù)據(jù)?!纠?-19】在SELECT語(yǔ)句中使用星號(hào)(“*”)通配符查詢XSXX表中的所有字段。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)SQL語(yǔ)句為:3)查詢指定字段查詢數(shù)據(jù)時(shí),可以在SELECT語(yǔ)句的字段列表中指定要查詢的字段,這種方式只針對(duì)部分字段進(jìn)行查詢,不會(huì)查詢所有字段?!纠?-20】使用SELECT語(yǔ)句查詢XSXX表中XM字段和RXZF字段的數(shù)據(jù)。輸入的語(yǔ)句及運(yùn)行結(jié)果如圖8-24所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)4)更改列標(biāo)題在選擇列表中,可重新指定列標(biāo)題。MySQL中為字段起別名的格式如下所示:【例8-21】查詢XSXX表中所有記錄的XM和RXZF字段值,并為這兩個(gè)字段起別名“姓名”和“入學(xué)總分”。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-25所示。5)聚合函數(shù)的使用MySQL中提供了一些函數(shù)來(lái)實(shí)現(xiàn)對(duì)某些數(shù)據(jù)進(jìn)行統(tǒng)計(jì),具體見(jiàn)表8-9。表8-9中的函數(shù)用于對(duì)一組值進(jìn)行統(tǒng)計(jì),并返回唯一值,這些函數(shù)被稱為聚合函數(shù)?!纠?-22】查詢XSXX表中所有記錄的RXZF字段的平均值,并將結(jié)果顯示為“入學(xué)平均分”。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-26所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)(2)使用WHERE子句設(shè)置查詢條件在SELECT語(yǔ)句中,最常見(jiàn)的是使用WHERE子句指定查詢條件來(lái)對(duì)數(shù)據(jù)進(jìn)行過(guò)濾。WHERE子句可包含各種條件運(yùn)算符:1)比較運(yùn)算符在MySQL中,常見(jiàn)的比較運(yùn)算符見(jiàn)表8-10。需要說(shuō)明的是,“<>”運(yùn)算符和“!=”等價(jià),都表示不等于。【例8-23】查詢XSXX表中RXZF大于或等于350分的學(xué)生信息。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-27所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)2)帶IN關(guān)鍵字的查詢IN關(guān)鍵字用于判斷某個(gè)字段的值是否在指定集合中,如果字段的值在集合中,則滿足條件,該字段所在的記錄將被查詢出來(lái)。語(yǔ)法格式如下所示:在上面的語(yǔ)法格式中,“元素1,元素2,…”表示集合中的元素,即指定的條件范圍。NOT是可選參數(shù),使用NOT表示查詢不在IN關(guān)鍵字指定集合范圍中的記錄?!纠?-24】查詢XSXX表中xh值為21001、210003的記錄。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-28所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)3)帶BETWEENAND關(guān)鍵字的查詢BETWEENAND用于判斷某個(gè)字段的值是否在指定的范圍之內(nèi)。如果字段的值在指定范圍內(nèi),則滿足條件,該字段所在的記錄將被查詢出來(lái);反之,則不會(huì)被查詢出來(lái)。語(yǔ)法格式如下所示:在上面的語(yǔ)法格式中,“值1”表示范圍條件的起始值,“值2”表示范圍條件的結(jié)束值。NOT是可選參數(shù),使用NOT表示查詢指定范圍之外的記錄。通常情況下,“值1”小于“值2”,否則查詢不到任何結(jié)果?!纠?-25】查詢XSXX表中RXZF值在300~400的學(xué)生XM和RXZF。SQL語(yǔ)句及運(yùn)行結(jié)果如圖8-29所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)4)空值查詢?cè)跀?shù)據(jù)表中,某些列的值可能為空值(NULL),空值不同于0,也不同于空字符串。在MySQL中,使用ISNULL關(guān)鍵字來(lái)判斷字段的值是否為空值。語(yǔ)法格式如下所示:在上面的語(yǔ)法格式中,“NOT”是可選參數(shù),使用NOT關(guān)鍵字用于判斷字段不是空值。5)帶DISTINCT關(guān)鍵字的查詢?cè)赟ELECT語(yǔ)句中,可以使用DISTINCT關(guān)鍵字來(lái)去掉查詢記錄中重復(fù)的值。語(yǔ)法格式如下:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-26】查詢XSXX表中XB字段的值,查詢記錄不能重復(fù)。SQL語(yǔ)句及運(yùn)行結(jié)果如圖8-30所示。從查詢記錄可以看到,這次查詢只返回了2條記錄的XBr值,分別為“男”和“女”,不再有重復(fù)值。6)帶LIKE關(guān)鍵字的查詢MySQL中提供了LIKE關(guān)鍵字,用于對(duì)字符串進(jìn)行模糊查詢。語(yǔ)法格式如下:NOT是可選參數(shù),使用NOT表示查詢與指定字符串不匹配的記錄?!捌ヅ渥址敝付ㄓ脕?lái)匹配的字符串,其值可以是一個(gè)普通字符串,也可以是包含百分號(hào)(%)和下劃線(_)的通配字符串。百分號(hào)和下劃線統(tǒng)稱為通配符。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)①百分號(hào)(%)通配符??梢云ヅ淙我忾L(zhǎng)度的字符串,包括空字符串?!纠?-27】查找XSXX表中姓“李”的學(xué)生的XH和XM。SQL語(yǔ)句及運(yùn)行結(jié)果如所示。百分號(hào)通配符可以出現(xiàn)在通配字符串的任意位置。在通配字符串中,可以出現(xiàn)多個(gè)百分號(hào)通配符。LIKE之前可以使用NOT關(guān)鍵字,用來(lái)查詢與指定通配字符串不匹配的記錄。②下劃線(_)通配符??梢云ヅ鋯蝹€(gè)任意字符,包括空字符?!纠?-28】查詢XSXX表中姓“李”且名字為兩個(gè)字的學(xué)生的XH和XM。SQL語(yǔ)句及運(yùn)行結(jié)果如圖8-32所示。由于一個(gè)漢字為兩個(gè)字節(jié),所以上例中需輸入兩個(gè)下劃線。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)7)帶AND關(guān)鍵字的多條件查詢?cè)贛ySQL中,提供了一個(gè)AND關(guān)鍵字,使用AND關(guān)鍵字可以連接兩個(gè)或者多個(gè)查詢條件,只有滿足所有條件的記錄才會(huì)被返回。語(yǔ)法格式如下所示:【例8-29】查詢XSXX表中NL為19,并且XB字段值為“女”的學(xué)生XH、XM和NL。SQL語(yǔ)句及運(yùn)行結(jié)果如圖8-33所示。8)帶OR關(guān)鍵字的多條件查詢?cè)谑褂肧ELECT語(yǔ)句查詢數(shù)據(jù)時(shí),也可以使用OR關(guān)鍵字連接多個(gè)查詢條件,只要記錄滿足任意一個(gè)條件,就會(huì)被查詢出來(lái)。語(yǔ)法格式如下所示:上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)【例8-30】查詢XSXX表中NL字段值為20或者XB字段值為“女”的學(xué)生XM、XB和NL。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-34所示。只要記錄滿足OR關(guān)鍵字連接的任意一個(gè)條件,就會(huì)被查詢出來(lái),而不需要同時(shí)滿足兩個(gè)條件表達(dá)式。(3)對(duì)查詢結(jié)果排序?yàn)榱耸共樵兘Y(jié)果滿足用戶的要求,可以使用ORDERBY對(duì)查詢結(jié)果進(jìn)行排序。ORDERBY子句的語(yǔ)法格式:參數(shù)ASC表示按照升序進(jìn)行排序,DESC表示按照降序進(jìn)行排序。默認(rèn)情況下,按照ASC方式進(jìn)行排序?!纠?-31】查出XSXX表中的所有記錄,并按照RXZF字段進(jìn)行降序排序。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-35所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)(4)分組查詢?cè)贛ySQL中,可以使用GROUPBY按某個(gè)字段或者多個(gè)字段中的值進(jìn)行分組,字段中值相同的為一組。GROUPBY子句語(yǔ)法格式如下所示:指定的字段名是對(duì)查詢結(jié)果分組的依據(jù)。HAVING關(guān)鍵字指定條件表達(dá)式對(duì)分組后的內(nèi)容進(jìn)行過(guò)濾。需要特別注意的是,GROUPBY一般和聚合函數(shù)一起使用,如果查詢的字段出現(xiàn)在GROUPBY后,卻沒(méi)有包含在聚合函數(shù)中,該字段顯示的是分組后的第一條記錄的值,這樣有可能會(huì)導(dǎo)致查詢結(jié)果不符合預(yù)期?!纠?-32】查詢XSXX表中的記錄,按照XB字段值進(jìn)行分組,統(tǒng)計(jì)每組RXZF字段的最大值。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-36所示。上一頁(yè)下一頁(yè)返回8.2 MySQL數(shù)據(jù)庫(kù)設(shè)計(jì)(5)使用LIMIT限制查詢結(jié)果的數(shù)量MySQL中提供了一個(gè)關(guān)鍵字LIMIT,可以指定查詢結(jié)果從哪一條記錄開(kāi)始及一共查詢多少條信息。LIMIT子句語(yǔ)法格式如下所示:【例8-33】查詢XSXX表中的前兩條記錄。SQL語(yǔ)句及其執(zhí)行結(jié)果如圖8-37所示。上一頁(yè)返回8.3 phpMyAdmin圖形管理工具M(jìn)ySQL數(shù)據(jù)庫(kù)和PHP的配合可以說(shuō)是天衣無(wú)縫,但是由于MySQL是基于Linux環(huán)境開(kāi)發(fā)出來(lái)的自由軟件,其命令提示符的操作方式,讓用慣了Windows圖形環(huán)境的初學(xué)者很不適應(yīng)。出于管理數(shù)據(jù)庫(kù)的便利,使用命令提示符可能并不是最佳選擇,而僅僅是有助于讀者深入理解MySQL數(shù)據(jù)庫(kù)。在PHP編程的過(guò)程中,使用phpMyAdmin來(lái)管理MySQL數(shù)據(jù)庫(kù)是一種非常流行的方法,同時(shí)也是比較明智的選擇。PhpMyAdmin提供了一個(gè)簡(jiǎn)潔的圖形界面,該界面不同于普通的運(yùn)行程序,而是以Web頁(yè)面的形式體現(xiàn),在相關(guān)的一系列Web頁(yè)面中,完成對(duì)MySQL數(shù)據(jù)庫(kù)的所有操作。下一頁(yè)返回8.3 phpMyAdmin圖形管理工具8.3.1 登錄phpMyAdmin
在WAMP管理菜單中單擊“phpMyAdmin”菜單項(xiàng),打開(kāi)phpMyAdmin的登錄頁(yè)面,輸入登入名稱“root”,密碼“root”,如圖8-38所示。單擊“執(zhí)行”按鈕,打開(kāi)phpMyAdmin圖形化管理界面,如圖8-39所示。在phpMyAdmin的主界面中,采用左右框架的形式將整個(gè)窗口分為兩大部分,左邊是選擇數(shù)據(jù)庫(kù)的窗口,用戶創(chuàng)建的所有數(shù)據(jù)庫(kù)都將出現(xiàn)在此窗口中;右邊的窗口主要提供了MySQL數(shù)據(jù)庫(kù)的創(chuàng)建功能及phpMyAdmin的部分文檔和設(shè)置。上一頁(yè)下一頁(yè)返回8.3 phpMyAdmin圖形管理工具8.3.2 操作數(shù)據(jù)庫(kù)
使用phpMyAdmin創(chuàng)建數(shù)據(jù)庫(kù),輸入數(shù)據(jù)庫(kù)名稱,如圖8-40所示,單擊“創(chuàng)建”按鈕。創(chuàng)建成功后,右側(cè)數(shù)據(jù)庫(kù)中能夠找到新建的數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)不再使用,可以選中要?jiǎng)h除的數(shù)據(jù)庫(kù),然后單擊“刪除”按鈕,可將對(duì)應(yīng)數(shù)據(jù)庫(kù)刪除,如圖8-41所示。8.3.3 操作數(shù)據(jù)表
phpMyAdmin可以在視圖界面下方便地創(chuàng)建數(shù)據(jù)表,并對(duì)數(shù)據(jù)表進(jìn)行修改或刪除。在左側(cè)選擇好數(shù)據(jù)庫(kù),在右側(cè)窗口中就可以方便地對(duì)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)操作,非常適合初學(xué)者。在數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表,并設(shè)置各字段名稱及屬性,如圖8-42和圖8-43所示。如果創(chuàng)建的表中需要修改字段名、字段屬性設(shè)置,可以使用修改功能,如圖8-44所示。上一頁(yè)下一頁(yè)返回8.3 phpMyAdmin圖形管理工具8.3.4 管理數(shù)據(jù)記錄
創(chuàng)建好數(shù)據(jù)庫(kù)、數(shù)據(jù)表后,就可以對(duì)數(shù)據(jù)進(jìn)行操作了。1.插入數(shù)據(jù)在主頁(yè)面上單擊上方的“插入”按鈕,在頁(yè)面中輸入要插入的相關(guān)數(shù)據(jù),單擊“執(zhí)行”按鈕,即可插入數(shù)據(jù)到數(shù)據(jù)表中,如圖8-45所示。
單擊上方的“瀏覽”按鈕,即可顯示插入的表數(shù)據(jù),如圖8-46所示。2.修改數(shù)據(jù)如果要修改表中的數(shù)據(jù),在圖8-46中單擊“修改”命令,進(jìn)入“修改”界面,如圖8-47所示。修改相關(guān)的字段值后單擊“執(zhí)行”按鈕,完成數(shù)據(jù)修改。上一頁(yè)下一頁(yè)返回8.3 phpMyAdmin圖形管理工具3.查詢數(shù)據(jù)單擊頁(yè)面上方的“SQL”選項(xiàng)卡,輸入查詢語(yǔ)句,單擊“執(zhí)行”按鈕即可進(jìn)行查詢,如圖8-48所示。4.刪除數(shù)據(jù)需要?jiǎng)h除數(shù)據(jù)時(shí),單擊瀏覽界面中數(shù)據(jù)前方的“刪除”按鈕,出現(xiàn)提示語(yǔ)句,單擊“確定”按鈕即可刪除數(shù)據(jù),如圖8-49所示。8.3.5 使用phpMyAdmin導(dǎo)入/導(dǎo)出數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)創(chuàng)建好后,經(jīng)常需要導(dǎo)入/導(dǎo)出,使用phpMyAdmin可以非常方便地將數(shù)據(jù)庫(kù)導(dǎo)入/導(dǎo)出。1.數(shù)據(jù)庫(kù)導(dǎo)出單擊主頁(yè)上方的“導(dǎo)出”選項(xiàng)卡,單擊“執(zhí)行”按鈕即可出現(xiàn)下載對(duì)話框。輸入導(dǎo)出文件的名字及下載路徑,單擊“下載”按鈕即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)的導(dǎo)出,如圖8-50所示。上一頁(yè)下一頁(yè)返回8.3 phpMyAdmin圖形管理工具2.數(shù)據(jù)庫(kù)導(dǎo)入單擊主頁(yè)上方的“導(dǎo)入”選項(xiàng)卡,單擊“選擇文件”按鈕,即可出現(xiàn)“打開(kāi)”對(duì)話框。選擇好要導(dǎo)入的SQL文件,單擊“執(zhí)行”按鈕即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)的導(dǎo)入,如圖8-51所示。上一頁(yè)返回8.4 PHP操作MySQL數(shù)據(jù)庫(kù)
如果用戶要將數(shù)據(jù)庫(kù)與Web應(yīng)用程序一起使用,必須首先連接該數(shù)據(jù)庫(kù)。如果沒(méi)有數(shù)據(jù)庫(kù)連接,應(yīng)用程序?qū)⒉恢涝诤翁幷业綌?shù)據(jù)庫(kù)或如何與之連接。8.4.1 PHP操作MySQL數(shù)據(jù)庫(kù)的步驟一般包括以下幾個(gè)步驟:①將SQL語(yǔ)句賦值給某個(gè)字符串變量;②執(zhí)行SQL語(yǔ)句;③如果是SELECT語(yǔ)句,則從游標(biāo)當(dāng)前位置讀取一條記錄的數(shù)據(jù)。8.4.2 PHP操作MySQL數(shù)據(jù)庫(kù)的方法
從根本上來(lái)說(shuō),PHP是通過(guò)預(yù)先寫好的一系列函數(shù)來(lái)與MySQL數(shù)據(jù)庫(kù)進(jìn)行通信
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年普通動(dòng)物學(xué)題庫(kù)200道帶答案(培優(yōu)a卷)
- 2024年扶余縣幼兒園教師招教考試備考題庫(kù)完美版
- 2025年會(huì)澤縣委社會(huì)工作部下屬事業(yè)單位招聘職業(yè)能力測(cè)試備考題庫(kù)300道附答案
- 2025-2030文化創(chuàng)意產(chǎn)業(yè)市場(chǎng)供需發(fā)展競(jìng)爭(zhēng)形勢(shì)及投資選擇規(guī)劃分析研究報(bào)告
- 2025-2030文化產(chǎn)權(quán)交易行業(yè)市場(chǎng)現(xiàn)狀供需分析及創(chuàng)新投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030文化產(chǎn)業(yè)園區(qū)投資市場(chǎng)供需分析投資評(píng)估規(guī)劃研究方法
- 2025-2030挪威領(lǐng)先的新型材料行業(yè)市場(chǎng)供需調(diào)研及發(fā)展前景規(guī)劃分析研究報(bào)告
- 2025-2030挪威海洋石油平臺(tái)設(shè)備行業(yè)市場(chǎng)發(fā)展及投資價(jià)值評(píng)估規(guī)劃分析報(bào)告
- 2025-2030挪威海洋水產(chǎn)養(yǎng)殖行業(yè)市場(chǎng)供需分析及發(fā)展策略規(guī)劃研究報(bào)告
- 2025-2030挪威水文發(fā)電行業(yè)市場(chǎng)前瞻性研究及技術(shù)創(chuàng)新與能源市場(chǎng)分析報(bào)告
- 清華大學(xué)教師教學(xué)檔案袋制度
- 公租房完整租賃合同范本
- 東南大學(xué)附屬中大醫(yī)院2026年招聘?jìng)淇碱}庫(kù)及答案詳解參考
- 2025新疆阿瓦提縣招聘警務(wù)輔助人員120人參考筆試題庫(kù)及答案解析
- 貴州國(guó)企招聘:2025貴州鹽業(yè)(集團(tuán))有限責(zé)任公司貴陽(yáng)分公司招聘考試題庫(kù)附答案
- 2025-2026學(xué)年秋季學(xué)期教學(xué)副校長(zhǎng)工作述職報(bào)告
- GB/T 3098.5-2025緊固件機(jī)械性能第5部分:自攻螺釘
- 2026年服裝電商直播轉(zhuǎn)化技巧
- 2025-2026學(xué)年小學(xué)美術(shù)浙美版(2024)二年級(jí)上冊(cè)期末練習(xí)卷及答案
- 會(huì)所軟裝合同范本
- 沖刺2026中考-科學(xué)備考班會(huì)課件
評(píng)論
0/150
提交評(píng)論