MySQL數(shù)據(jù)庫基礎(chǔ)學(xué)習(xí)_第1頁
MySQL數(shù)據(jù)庫基礎(chǔ)學(xué)習(xí)_第2頁
MySQL數(shù)據(jù)庫基礎(chǔ)學(xué)習(xí)_第3頁
MySQL數(shù)據(jù)庫基礎(chǔ)學(xué)習(xí)_第4頁
MySQL數(shù)據(jù)庫基礎(chǔ)學(xué)習(xí)_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-1第5章MySQL數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)庫概念什么是MySQLMySQL與xBase的差別MySQL的基本語法MySQL的常用操作SQL簡介MySQL的安裝和調(diào)試MySQL的GUI客戶端第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-2本章教學(xué)目標(biāo)了解Web數(shù)據(jù)庫的特點(diǎn),理解Web數(shù)據(jù)庫應(yīng)用的基本流程和特點(diǎn)了解數(shù)據(jù)庫的基本要素和數(shù)據(jù)類型,掌握數(shù)據(jù)庫數(shù)據(jù)和字段類型的選取原則學(xué)習(xí)測試MySQL,理解和掌握C/S結(jié)構(gòu)數(shù)據(jù)庫的應(yīng)用特點(diǎn),掌握基本的Web數(shù)據(jù)庫客戶端的應(yīng)用了解常用的SQL語句第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-3數(shù)據(jù)庫概念數(shù)據(jù)庫是管理信息的常規(guī)手段,它可以處理各種各樣的信息、試驗(yàn)數(shù)據(jù)、業(yè)務(wù)記錄、銷售訂單、人事檔案和顧客請求等數(shù)據(jù)庫的優(yōu)勢在于可以將龐大、復(fù)雜的信息以有序的方式組織起來,便于修改和查詢,免除管理人員手工處理這些枯燥的數(shù)據(jù)數(shù)據(jù)庫系統(tǒng)在算法、系統(tǒng)結(jié)構(gòu)等方面采取了許多辦法提高數(shù)據(jù)處理性能,同時在數(shù)據(jù)的保護(hù)、存取控制和備份上附加了許多重要功能第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-4關(guān)系數(shù)據(jù)庫概念數(shù)據(jù)庫的一般分類方法是按數(shù)據(jù)的組織和查詢方式區(qū)分早期數(shù)據(jù)庫常常是網(wǎng)狀結(jié)構(gòu)數(shù)據(jù)庫或者層次結(jié)構(gòu)數(shù)據(jù)庫目前主要的數(shù)據(jù)庫系統(tǒng)都是基于關(guān)系代數(shù)的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中,表中的數(shù)據(jù)可以通過記錄(行)或字段(列)查詢,同時表與表之間的數(shù)據(jù)可以建立“關(guān)系”,即可從不同的表中找到相關(guān)的信息第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-5數(shù)據(jù)庫常用操作一般關(guān)系型數(shù)據(jù)庫可以對表做插入、刪除、更新、檢索(常用英文縮寫ADUS表示)記錄等操作現(xiàn)在許多關(guān)系型數(shù)據(jù)庫添加了部分面向?qū)ο筇厣贿^一般還是以關(guān)系運(yùn)算為基礎(chǔ)ADUS為Add,Delete,Update,Search四個英文單詞的詞頭字母第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-6SQL概念關(guān)系型數(shù)據(jù)庫使用的語言稱為結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,SQL),SQL是數(shù)據(jù)庫語言的標(biāo)準(zhǔn)微軟公司有一個SQLServer,它只是一個實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的數(shù)據(jù)庫產(chǎn)品,并非SQL標(biāo)準(zhǔn)市場上有很多符合SQL標(biāo)準(zhǔn)的數(shù)據(jù)庫產(chǎn)品,最流行的當(dāng)數(shù)Oracle公司的Oracle9iSQL標(biāo)準(zhǔn)由IBM的DB2數(shù)據(jù)庫演化而來,DB2也是一個非常出色的商業(yè)化數(shù)據(jù)庫產(chǎn)品第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-7什么是MySQLMySQL是一個快速、多線程、多用戶、網(wǎng)絡(luò)化的SQL數(shù)據(jù)庫服務(wù)器,由瑞典TcX公司負(fù)責(zé)開發(fā)和維護(hù)1994年,TcX開始尋找一個用來開發(fā)Web應(yīng)用程序的SQL服務(wù)器,并測試了一些商業(yè)服務(wù)器,但是發(fā)現(xiàn)所有這些服務(wù)器對于TcX的大型數(shù)據(jù)表來說都太慢因此他們開發(fā)了新的服務(wù)器,這就是MySQLMySQL在2008年1月被Sun公司收購第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-8MySQL的工作環(huán)境MySQL可以工作在許多平臺上,如PC上使用的Linux、FreeBSD等開放源代碼的操作系統(tǒng),運(yùn)行在企業(yè)級服務(wù)器上的Solaris和Windows等商用操作系統(tǒng)本課程建議使用ApacheFriendsforWindows套件中包含的MySQL數(shù)據(jù)服務(wù)器、以及相關(guān)的其他組件(NativeClients和phpMyadmin)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-9MySQL與xBase的差別MySQL與xBase類的數(shù)據(jù)庫系統(tǒng)(包括dBase、FoxBASE、Paradox等)有很大差別,這些差別包括:數(shù)據(jù)庫運(yùn)行的形態(tài)數(shù)據(jù)庫查詢語言數(shù)據(jù)庫程序設(shè)計方法數(shù)據(jù)庫安全管理數(shù)據(jù)庫訪問方式等第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-10xBase工作模式(一)xBase在運(yùn)行中一般不使用客戶端/服務(wù)器(C/S結(jié)構(gòu))形態(tài),它以一體化形式構(gòu)造的數(shù)據(jù)庫管理系統(tǒng)隨客戶端一起啟動和關(guān)閉,或者說xBase的客戶端和數(shù)據(jù)庫管理系統(tǒng)同屬一個計算機(jī)進(jìn)程雖然xBase可以在C/S結(jié)構(gòu)或局域網(wǎng)環(huán)境下運(yùn)行,但一般僅限于文件服務(wù)器形態(tài),而不是數(shù)據(jù)庫服務(wù)器形態(tài),文件服務(wù)器在數(shù)據(jù)庫環(huán)境下工作效率很低第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-11xBase工作模式(二)例如運(yùn)行在網(wǎng)絡(luò)工作站上的xBase的應(yīng)用程序需要進(jìn)行數(shù)據(jù)查詢:其可能的查詢結(jié)果只有三條記錄而整個數(shù)據(jù)表卻有2000條記錄存儲數(shù)據(jù)文件的文件服務(wù)器會將整張表全部發(fā)給該工作站,由工作站選取到需要的記錄后,將無用的記錄丟棄這種方式應(yīng)用在局域網(wǎng)環(huán)境下,是可以忍受的,但在廣域網(wǎng)中,確實(shí)是最不經(jīng)濟(jì)的第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-12xBase工作模式(圖示)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-13MySQL與xBase的差別MySQL是一個基于C/S結(jié)構(gòu)的數(shù)據(jù)庫服務(wù)器,它的服務(wù)器程序和客戶端程序是互相獨(dú)立的計算機(jī)進(jìn)程,這些進(jìn)程的基本運(yùn)行過程都是基于TCP/IP的客戶端程序需要依賴于服務(wù)器的服務(wù),這種服務(wù)模式的工作效率比文件服務(wù)方式高的多,且客戶端程序的終止不會影響服務(wù)器程序的運(yùn)行第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-14MySQL的工作模式(一)如果瀏覽器需要通過Web服務(wù)器訪問數(shù)據(jù)庫服務(wù)器,只需將訪問請求發(fā)送給數(shù)據(jù)庫服務(wù)器(一般以SQL指令形式鑲嵌在動態(tài)網(wǎng)頁里通過CGI解釋器發(fā)送給數(shù)據(jù)庫服務(wù)器),數(shù)據(jù)庫服務(wù)器在完成查詢?nèi)蝿?wù)后,將查詢結(jié)果(如三條記錄)通過Web服務(wù)器發(fā)送給瀏覽器用戶這種過程自然會加大對數(shù)據(jù)庫服務(wù)器駐留主機(jī)的工作負(fù)荷,但大大減輕了網(wǎng)絡(luò)傳輸?shù)膲毫Γ岣吡司W(wǎng)絡(luò)的效率,這對像因特網(wǎng)上的應(yīng)用程序卻是至關(guān)重要的第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-15MySQL的工作模式(圖示)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-16MySQL的工作模式(二)用戶在操作系統(tǒng)中可以通過不同的方式觀察MySQL的運(yùn)行形態(tài)在UNIX系統(tǒng)中可以通過$ps-aux命令觀察在Windows下,可以通過任務(wù)窗口看到這兩個不同的進(jìn)程(MySQLServervs.MySQLclient)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-17MySQL的工作模式(三)MySQL的客戶端程序個數(shù)很多,各項數(shù)據(jù)庫管理任務(wù)是通過各種不同的客戶端程序來完成的如常規(guī)數(shù)據(jù)庫操作程序“mysql.exe”,數(shù)據(jù)后備程序“mysqldump.exe”,管理員客戶程序“mysqladmin.exe”等值得注意的是,作為Web服務(wù)器的組成部分,PHP.exe(或PHP.dll)程序在與數(shù)據(jù)庫服務(wù)器通信時,其身份也是數(shù)據(jù)庫的客戶端程序第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-18MySQLvs.xBase---數(shù)據(jù)庫查詢語言xBase一般采用專用的數(shù)據(jù)庫查詢語言。這種數(shù)據(jù)庫查詢語言與數(shù)據(jù)庫應(yīng)用程序的設(shè)計往往是一體化的,這樣做的優(yōu)點(diǎn)是執(zhí)行效率高,缺點(diǎn)是通用性或可移植性差MySQL采用工業(yè)界通行的SQL語言(這是目前大部分?jǐn)?shù)據(jù)庫產(chǎn)品所支持的數(shù)據(jù)訪問語言),具有良好的通用性或可移植性,使應(yīng)用程序的開發(fā)效率大大提高第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-19MySQLvs.xBase--數(shù)據(jù)庫程序設(shè)計方法在xBase中,數(shù)據(jù)庫應(yīng)用程序的設(shè)計語言與數(shù)據(jù)庫查詢操作語言是一體化設(shè)計的,不存在選擇程序設(shè)計方法的問題而MySQL是SQL標(biāo)準(zhǔn)的一種實(shí)現(xiàn)方式,由于SQL語言不支持變量和程序控制流程,所以數(shù)據(jù)庫應(yīng)用程序的開發(fā)必須依賴于其他的所謂“宿主”語言,而PHP也是一種SQL的宿主語言。第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-20MySQLvs.xBase---數(shù)據(jù)庫安全管理在xBase中,幾乎沒有什么安全性可言,任何人只要能夠打開計算機(jī)或登錄到文件服務(wù)器,就可以對數(shù)據(jù)庫文件進(jìn)行訪問在MySQL中,對用戶登錄和數(shù)據(jù)庫表的訪問設(shè)定了比較全面的安全管理,同時,也增加了服務(wù)器管理員的管理工作熟悉xBase的程序員往往要花一定的時間才能適應(yīng)MySQL在安全性方面設(shè)置的各種“絆腳石”。第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-21MySQL的安全性管理包括用戶注冊和登錄的管理本地登錄和網(wǎng)絡(luò)登錄的管理各種資源操作權(quán)限管理第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-22MySQL的服務(wù)器啟動啟動ApacheFriends的MySQL服務(wù)器:d:\xampp\mysql_start.bat”服務(wù)器啟動后,可以該作業(yè)視窗不可關(guān)閉

第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-23MySQL登錄(NativeClient)啟動MySQL客戶端程序“mysql.exe”,連接數(shù)據(jù)庫服務(wù)器。在Windows環(huán)境下使用DOS命令:

c:\mysql\bin\mysql//初次啟動無口令設(shè)置時,默認(rèn)以root身份登錄以root身份登錄MySQL或啟動mysql客戶端與Linux系統(tǒng)管理員沒關(guān)系;客戶端連接成功后,系統(tǒng)出現(xiàn)mysql>字樣的提示符,表示服務(wù)器準(zhǔn)備接受服務(wù)請求第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-24MySQL的基本使用過程(NativeClient)選擇需要操作的數(shù)據(jù)庫:

mysql>usemysql; //選擇MySQL的管理數(shù)據(jù)庫進(jìn)行相關(guān)的數(shù)據(jù)庫操作:

mysql>select*fromuser; //顯示mysql數(shù)據(jù)庫中user表內(nèi)的內(nèi)容斷開客戶端程序與數(shù)據(jù)庫服務(wù)器連接:

mysql>quit;

第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-25MySQL服務(wù)器的關(guān)閉在必要時,關(guān)閉數(shù)據(jù)庫服務(wù)器

D:\xampp\mysql_stop.bat第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-26MySQL的基本語法---命名規(guī)則用于數(shù)據(jù)庫、表、記錄、字段、索引和別名。MySQL命名使用的字符除了字母、數(shù)字和下劃線“_”,還有美元符“$”。四種字符都可以用在名稱的第一個字符,不像一般程序語言只能用字母開頭不過純粹數(shù)字是不能作為名稱使用的,否則就會產(chǎn)生混淆浮點(diǎn)數(shù)指數(shù)部分不能省略“+”和“-”符號的原因也在于此一般名稱不能超過64個字符,別名可放寬到256個字符第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-27MySQL的基本語法---大小寫規(guī)則別名區(qū)分大小寫MySQL的數(shù)據(jù)庫和表分別以目錄和文件的形式存在,因此大小寫的區(qū)分依賴于數(shù)據(jù)庫服務(wù)器駐留的操作系統(tǒng)。Windows下它們不分大小寫,而UNIX下區(qū)分大小寫字段、索引、函數(shù)名和關(guān)鍵字不區(qū)分大小寫無論這些名稱是否區(qū)分大小寫,管理員和用戶都應(yīng)該建立一個貫穿始終的策略第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-28MySQL數(shù)據(jù)的表示及存儲形式MySQL從基本數(shù)據(jù)類型和字段類型兩方面來考慮數(shù)據(jù);而基本數(shù)據(jù)類型是字段類型的基礎(chǔ)MySQL的基本數(shù)據(jù)類型包括:十進(jìn)制數(shù)、16進(jìn)制數(shù)字、字符串、日期和時間第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-29MySQL基本數(shù)據(jù)類型---10進(jìn)制數(shù)字最常用的一種計數(shù)法,包括整數(shù)和浮點(diǎn)數(shù)若數(shù)字前有“-”,表示該數(shù)是負(fù)值小數(shù)點(diǎn)“.”作為浮點(diǎn)數(shù)的分隔符,小數(shù)點(diǎn)兩側(cè)的零值可以分別省略,但不能同時省略例如:0.13可以記為.13;1.0可以記為1.科學(xué)計數(shù)法:格式為10進(jìn)制數(shù)字,接無理數(shù)e(或E),接“+”或“-”號(其中“+、-”號不可缺少,否則會產(chǎn)生混淆),再接一個無符號整數(shù)一個整數(shù)也可以在浮點(diǎn)語境中使用,被系統(tǒng)解釋為等值的浮點(diǎn)數(shù)下面是幾個合法的十進(jìn)制數(shù):

1221,0,-33

284.34,-12312.213e+10,133.00第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-30MySQL的基本數(shù)據(jù)類型---16進(jìn)制數(shù)字在數(shù)字語境中,16進(jìn)制數(shù)字類似于整數(shù),(精度為64位)。例如:由于“+”的出現(xiàn),使得下列SQL語句處于數(shù)字語境:mysql>SELECT0xa+0;

在字符串語境中,16進(jìn)制數(shù)字類似于用二進(jìn)制形式表示的字符串,這里每一對16進(jìn)制數(shù)字被變換為一個字符

MySQL>select0x5061756c;

->Paul第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-31MySQL的基本數(shù)據(jù)類型---字符串一個字符串是一個字符序列,用單引號(')或雙引號(")圈起來。例如:'astring',"anotherstring“與PHP類似,MySQL也有一些字符序列有特殊的意義,這些字符序列以反斜線(\)開始,稱為轉(zhuǎn)義字符例如:\t=制表符,\0=ASCII0(NULL)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-32MySQL的基本數(shù)據(jù)類型---日期和時間MySQL支持多種時間格式2001-12-12、12:12:12,這種時間格式是ANSI標(biāo)準(zhǔn)而0000000000234254,是UNlX時間戳格式第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-33MySQL的基本數(shù)據(jù)類型---NULLNULL是一個特殊值,它表示沒有任何值,它與“0”、空字符串都不是一回事NULL進(jìn)行算術(shù)運(yùn)算,答案只能是NULL第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-34MySQL字段類型在建數(shù)據(jù)庫表時,要為每字段指定類型MySQL每種基本數(shù)據(jù)類型(NULL除外)都可以衍生出若干字段類型NULL類型則被視為一個NULL值或者NULL屬性,為其它字段類型使用由于MySQL正處在不斷開發(fā)的過程中,因此有些特性包括字段類型的性質(zhì)也可能發(fā)生變化第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-35MySQL字段類型---整數(shù)由整數(shù)衍生的字段類型有無符號都可以,所有的整型類型可以有一個可選屬性(非標(biāo)準(zhǔn)的)“UNSIGNED”若在字段中僅使用正數(shù)并期望有較大的取值范圍,則可以使用無符號值INT是INTEGER的同義詞第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-36MySQL的整數(shù)字段類型

字段類型需要的存儲量 TINYINTl個字節(jié) SMALLINT 2個字節(jié) MEDIUMINT3個字節(jié) INT 4個字節(jié) INTEGER 4個字節(jié) BIGINT8個字節(jié) 第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-37MySQL字段類型---浮點(diǎn)數(shù)浮點(diǎn)數(shù)衍生的字段類型有三種:FLOAT、DOUBLE和DECIMAL與整型不同,它們不能有USIGNED屬性,但擁有最小非0值,可以指定精度第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-38MySQL的浮點(diǎn)型字段類型字段類型 需要的存儲量

FLOAT[(M,D)],F(xiàn)LOAT(4)

4字節(jié)DOUBLE[(M,D)],F(xiàn)LOAT(8)8字節(jié)DOUBLEPRECISION,

REAL,DEC,

DECIMAL(M,D),NUMERICM+2字節(jié)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-39MySQL字段類型---DECEMAL說明(1)DEC、NUMERIC、REAL和DOUBLEPRECISION作為關(guān)鍵詞在MySQL中是DECEMAL的同義詞,被實(shí)現(xiàn)為同樣的類型,用于保存對準(zhǔn)確精度敏感的值例如與貨幣有有關(guān)的數(shù)據(jù)當(dāng)聲明某個字段是這些類型之一時,需要指定數(shù)值的精度(Precision)和小數(shù)位數(shù)(Scale)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-40MySQL字段類型---DECEMAL說明(2)在MySQL中,為保證小數(shù)精度,DECIMAL

等類型數(shù)值是以字符串形式而不是以二進(jìn)制浮點(diǎn)數(shù)形式存儲的,被保存數(shù)值的每位使用1個字符對于負(fù)值,“-”號占一個字符,當(dāng)一個數(shù)的小數(shù)部分不為零時,小數(shù)點(diǎn)“.”占一個字符,反之,小數(shù)點(diǎn)不占字符例如:18.0的存儲形式為18,是2位,而18.3的存儲形式為18.3,是4位第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-41MySQL字段類型---DECEMAL說明(3)DECIMAL字段,實(shí)際范圍可由設(shè)定字段的precision(M)或scale(D)限制如果賦給小數(shù)部分的位超過了scale所指定的位數(shù)時,該值將根據(jù)scale四舍五入當(dāng)一個DECIMAL字段被賦予的值超過了指定的(或默認(rèn)值)precision和scale隱含范圍時,MySQL將存儲該字段所示范圍的相應(yīng)最大值或最小值例如:“testDECEMAL(4,2)”被賦予0.003時,實(shí)際存儲的值為0.01第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-42MySQL字段類型---字符串字符串類型有CHAR,VARCHAR,BLOB,TEXT,ENUM和SET字符串類型不但可以存儲字符串,也可以用來存儲二進(jìn)制數(shù)據(jù),例如圖像和聲音等多媒體數(shù)據(jù)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-43MySQL字段類型---字符串說明VARCHAR和BLOB和TEXT類型是變長類型,對于其存儲需求取決于字段值的實(shí)際長度ENUM對象是枚舉類型,其大小由不同枚舉值的數(shù)量決定。長度為1個字節(jié)時,最大多以有255個值;2個字節(jié)時,最多可以有65535個值SET對象的大小由(彼此不同的)集合成員數(shù)量決定,如果集合大小是N,對象可占據(jù)(N+7)/8(結(jié)果四舍五入為1,2,3,4或8)個字節(jié)。一個SET對象最多能有64個成員第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-44CHAR和VARCHAR(1)這兩種數(shù)據(jù)類型區(qū)別在于存儲和檢索的方式不同CHAR字段的長度可以是0~255之間的整數(shù)值。例如CHAR(4)占有4個字節(jié)。當(dāng)CHAR值存儲時,如果實(shí)際字符串長度較聲明的短,系統(tǒng)用空格字符串靠右填補(bǔ)到聲明長度。當(dāng)CHAR值被檢索時,右面的空格被自動刪去,因此CHAR數(shù)據(jù)類型右面無法加上空格第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-45CHAR和VARCHAR(2)VARCHAR字段中的值是變長字符串。VARCHAR字段長度可以在1~255之間聲明VARCHAR值除存儲若干字符外,還須一個字節(jié)用于記錄字串長度,而不再填補(bǔ)空格VARCHAR的值在存儲時,右面的空格被自動刪去這樣,從最終檢索效果來看和CHAR是一樣的,但VARCHAR比CHAR多占據(jù)一個字節(jié)如果把一個超過字段最大長度的字符串賦給CHAR或VARCHAR字段,該字符串將被截斷,以適合最大長度

第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-46CHAR和VARCHAR(3)CHAR和VARCHAR字段在存儲和比較值時,一般不用區(qū)分字母的大小寫,除非在建表時,被指定具有BINARY屬性BINARY屬性意味著該字段的值根據(jù)ASCII代碼順序以大小寫區(qū)分的方式存儲和比較如果標(biāo)記了BINARY的字段用于一個表達(dá)式中,整個表達(dá)式將作為一個BINARY值參與比較第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-47TEXT和BLOB說明(1)MySQL有4個TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT;一般情況下,可以認(rèn)為TEXT字段是一個大型的VARCHAR字段與TEXT類型相對應(yīng)于4個BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB。可以把BLOB字段看成是一個大型VARCHARBINARY字段第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-48TEXT和BLOB(2)二者具有同樣的最大長度和存儲需求。BLOB和TEXT類型之間的惟一差別是:對BLOB的值進(jìn)行排序和比較時,要考慮字母大小寫,而TEXT值不用考慮字母大小寫如果把一個超過字段類型最大長度的值賦給BLOB或TEXT字段,這個的超過部分將被略去LongBLOB或LongTEXT字段數(shù)據(jù)項的存儲能力為232+4(用于存儲多媒體數(shù)據(jù))第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-49MySQL日期和時間類型DATETIME、DATE、TIMESTAMP、TIME和YEAR,都有合法的取值范圍插入非法的值的結(jié)果,該字段值被置為0為使日期核查更“快捷”,MySQL只檢查月份是否在0~12的范圍內(nèi),日期在0~31的范圍內(nèi)MySQL實(shí)際上允許存儲某些不存在的日期值,例如2002-2-31,因此日期檢查成了應(yīng)用程序的責(zé)任第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-50MySQL日期和時間類型DATETIME同時包含日期和時間信息DATE類型只包含日期值MySQL以“HH:MM:SS”格式顯示TIME值MySQL檢索并且以“YYYY”格式顯示YEAR值,其范圍從1901~2155第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-51數(shù)據(jù)庫表字段類型選擇(一)字段類型選擇要能正確表達(dá)應(yīng)用程序?qū)?shù)據(jù)本身的要求。例如:如果是金融數(shù)據(jù),設(shè)計時程序要考慮字段類型能否表達(dá)所需數(shù)據(jù)的精度在科研和工程應(yīng)用方面,則必須考慮字段類型能否正確表示特別大或特別小的數(shù)據(jù),不能因?yàn)閿?shù)據(jù)超出可表達(dá)的范圍而被截斷第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-52數(shù)據(jù)庫表字段類型選擇(二)字段類型選擇要便于操作。有些數(shù)據(jù)表面上是數(shù)字,但實(shí)際使用時,用字符串表示則會更方便例如,在查詢IP地址時,很少做算術(shù)運(yùn)算,卻可能經(jīng)常做模式匹配對于選項很少的字符串,一般用枚舉型要合適些。例如,性別第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-53數(shù)據(jù)庫表字段類型選擇(二)字段類型選擇必須考慮和比較選擇方案的性能和效率問題對于比較短數(shù)據(jù),通常不要隨便使用過大的字段類型,這樣數(shù)據(jù)處理會更快一般情況下,定長字段類型比不定長字段類型處理要快,整數(shù)比浮點(diǎn)數(shù)要快得多第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-54MySQL---數(shù)據(jù)庫級操作創(chuàng)建數(shù)據(jù)庫

mysql>CreateDatabase數(shù)據(jù)庫名;例如:mysql>CreateDatabasenetsql;//創(chuàng)建網(wǎng)絡(luò)實(shí)驗(yàn)用數(shù)據(jù)庫第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-55創(chuàng)建數(shù)據(jù)庫新建的數(shù)據(jù)庫以一個目錄形式存在于硬盤上(xampp\mysql\data目錄下)目錄中為每個表建立了3個文件,分別記錄表結(jié)構(gòu)、索引(即使不建立索引這個文件依然存在)和數(shù)據(jù)內(nèi)容第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-56使用(選擇)數(shù)據(jù)庫在MySQL中,用戶可以操作多個數(shù)據(jù)庫,use指令用來確定當(dāng)前數(shù)據(jù)庫:mysql>use數(shù)據(jù)庫名;例如:mysql>usenetsql;

//選定網(wǎng)絡(luò)實(shí)驗(yàn)用數(shù)據(jù)庫對于當(dāng)前的數(shù)據(jù)庫表進(jìn)行操作時,可以省略數(shù)據(jù)庫名稱當(dāng)被操作的表不在當(dāng)前數(shù)據(jù)庫時,要用“數(shù)據(jù)庫名.表名”作為被操作對象的名稱第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-57MySQL表結(jié)構(gòu)的操作指令“CREATETABLE”是創(chuàng)建新表的命令,MySQL建表命令格式如下:CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name

[(create_definition,...)][table_options][select_statement]第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-58建表操作一個用MySQL指令建立表的示例:mysql>CREATETABLEsample(

NameCHAR(30)NOTNULL,addressCHAR(60),ageINTNOTNULL,

weightINT,sexENUM("F","M"),INDEX(name(10))

);第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-59建表操作(使用SELECT)如果在CREATE語句后指定一個SELECT語句,則可以從一個現(xiàn)有的表中派生出一張新表,MySQL將為在SELECT語句中所列出的所有的字段創(chuàng)建新字段。例如:

mysql>CREATETABLEtest2SELECTb,cFROMtest1

該指令將創(chuàng)建一個有2個字段的新表test2,其字段的定義來自于其派生的表test1第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-60MySQL的數(shù)據(jù)錄入可以使用INSERT語句在表建好的表中存儲數(shù)據(jù),其基本格式是:INSERT[INTO]tbl_name[(col_name,...)]

VALUES(expression,...),(...),...上述格式表示,一次可以插入多個數(shù)據(jù)字段。例如:$sql="INSERTINTOimgstoreVALUES(NULL,'$formdesc','$data',

#026:'$formdata_name','$formdata_size','$formdata_type')";

第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-61MySQL的數(shù)據(jù)錄入注意事項在作INSERT操作時:不要忘記給聲明了NOTNULL的字段賦值注意數(shù)值字段不要超出范圍字符串字段長度不要超界第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-62MySQL的數(shù)據(jù)錄入---表輸入如果要用一個現(xiàn)成表的數(shù)據(jù)建立一個新表,則可以用下列格式完成:INSERT[INTO]tbl_name[(col_name,...)]SELECT...INSERT語句里的SELECT子句不能包含ORDERBY子句如果tbl_name后面沒有跟col_name,所有的字段值必須在VALUES()表中或由SELECT提供任何沒有明確給出值的字段都將被置為其默認(rèn)值第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-63MySQL的數(shù)據(jù)錄入---文件輸入(一)MySQL提供的“LOADDATA”命令,可以用一個文本文件來輸入數(shù)據(jù),它的基本格式如下:LOADDATA[LOCAL]INFILE'file_name.txt'INTOTABLEtbl_name如果沒有使用“LOCAL”關(guān)鍵字,則“file_name.txt”必須位于MySQL服務(wù)器駐留的主機(jī)上在讀取位于服務(wù)器上的文件時,文件必須處于MySQL數(shù)據(jù)庫的安裝目錄下并可被所有人讀取,而且用戶須在服務(wù)器主機(jī)上擁有對文件進(jìn)行操作的權(quán)限第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-64MySQL的數(shù)據(jù)錄入---文件錄入(圖例)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-65MySQL的數(shù)據(jù)錄入---文件輸入(二)如果指定了“LOCAL”,則從客戶端主機(jī)讀入文件這種方式將比從服務(wù)器直接存取文件慢些,因?yàn)槲募?nèi)容須從客戶主機(jī)傳送到服務(wù)器主機(jī)但這種方式用戶無須在服務(wù)器主機(jī)上擁有裝載文件的file權(quán)限第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-66MySQL的數(shù)據(jù)錄入文件輸入(三)讀取輸入文件時,LOADDATAINFILE假定文本文件的格式滿足以下幾條規(guī)定:記錄邊界在換行符(CR)處制表符在(Tab)記錄中分出字段不需要引號將字符串括起按字面形式解釋“\”開頭字符,不作替換第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-67MySQL的數(shù)據(jù)錄入---文件輸入(例1)設(shè)“areacode.txt”文件存有我國各個地市的地區(qū)代碼和與其相對應(yīng)的地名,每行都有兩個字符串,即區(qū)域代碼(5位字符)和區(qū)域名稱(2~10個漢字),兩種數(shù)據(jù)之間用制表符分隔如果將區(qū)域代碼和區(qū)域名稱存入MySQL數(shù)據(jù)庫,可提供查詢操作第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-68MySQL的數(shù)據(jù)錄入---文件輸入(例2)mysql>createdatabasenetsql;mysql>usenetsql;mysql>createtableareacode(codechar(5),addrvarchar(30));mysql>loaddatainfile'areacode.txt'intotableareacode;mysql>select*fromareacodewherecode='46101';第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-69MySQL的數(shù)據(jù)更新(一)更新數(shù)據(jù)庫中現(xiàn)存的數(shù)據(jù),需要用到UPDATE語句,其的格式如下:

UPDATEtbl_nameSETcol_name1=expr1,col_name2=expr2,...

[WHEREwhere_definition]SET子句指出需要修改的字段并給出正確的值;WHERE子句是可選的,用來選擇需要更新的記錄如果沒WHERE子句,則表示表中所有的記錄將被全部更新第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-70MySQL的數(shù)據(jù)更新(例1)下列語句將salaries表的所有記錄中的sum字段的當(dāng)前值加1:mysql>UPDATEsalariesSETsum=sum+1;第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-71MySQL的數(shù)據(jù)更新(例2)下列語句將salaries表的所有記錄的sum字段值加倍再加1:mysql>UPDATEsalariesSETsum=sum*2,sum=sum+1;在執(zhí)行UPDATE語句后,數(shù)據(jù)庫系統(tǒng)會返回被更新記錄的數(shù)量第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-72MySQL的數(shù)據(jù)刪除(一)DELETE用來刪除表中的數(shù)據(jù),它的格式是:DELETEFROMtbl_name[WHEREwhere_definition]例如:mysql>DELETEFROMsample;上述指令將刪除sample表中的所有記錄為了提高效率,MySQL實(shí)際上是通過創(chuàng)建一個空的sample表來完成該操作第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-73MySQL的數(shù)據(jù)刪除(例)如果希望只刪除某個表中特定的某些記錄,就要使用WHERE子句,例如:mysql>DELETEFROMsampleWHEREid>1000;

mysql>DELETEFROMsampleWHEREid>1000ANDvalue<100;第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-74MySQL的查詢在數(shù)據(jù)庫操作中,對表進(jìn)行查詢是建立數(shù)據(jù)庫的主要目的所以在SQL中,數(shù)據(jù)查詢是數(shù)據(jù)庫操作中最為有用、同時又是最為復(fù)雜的功能可以這樣認(rèn)為:數(shù)據(jù)庫的建設(shè)和數(shù)據(jù)的錄入往往是少數(shù)專業(yè)人士的任務(wù)對數(shù)據(jù)庫中的資源利用(也就是查詢),卻是全體數(shù)據(jù)庫用戶所需要掌握的技術(shù)第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-75MySQL的查詢---基本格式在SQL中,用SELECT語句進(jìn)行信息查詢,它的一般格式是:

SELECTselect_expression,..[FROMtable_references[WHEREwhere_definition]]SELECT從指定表中選取符合條件的記錄中的特定字段。SELECT最簡單、并且最常見的用途是從數(shù)據(jù)表中檢索所有信息:

mysql>select*fromuser;第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-76MySQL的查詢---例外不過在MySQL中,有時SELECT操作卻與表毫無關(guān)聯(lián),下面的命令就是一個例子:

mysql>SELECT1+1;

mysql>selectnow();第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-77MySQL的查詢---客戶端程序當(dāng)在MYSQL自己的客戶端程序(mysql.exe)上進(jìn)行數(shù)據(jù)庫查詢操作時,由于mysql.user表的記錄比較長,因此在屏幕顯示時會出現(xiàn)繞回的情況,顯示結(jié)果看上去比較凌亂ApacheFriends套件中的phpmyadmin,可以解決MySQL的所有查詢和其他基本操作第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-78MySQL的查詢---where子句用戶可從表中只選擇特定的字段進(jìn)行顯示:mysql>SELECTHost,UserFROMuser;如果希望指定顯示某些特定記錄,那么可以使用WHERE子句:mysql>SELECT*FROMuserWHEREHost='localhost';Where子句里可以有邏輯操作:mysql>SELECT*FROMuserWHEREHost="localhost"ANDUser='root';第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-79MySQL的查詢---結(jié)果排序檢索顯示在記錄用某個有意義的方式進(jìn)行排序時,將會變得更加有效。排序操作需要在SELECT語句中使用ORDERBY子句但是,目前的MySQL對漢字排序處理沒有實(shí)際意義第5章MySQL數(shù)據(jù)庫基礎(chǔ)88-80MySQL的查詢---結(jié)果排序舉例mysql>SELEC

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論