《數(shù)據(jù)庫(kù)系統(tǒng)與應(yīng)用技術(shù)》課件 第2章 MySQL數(shù)據(jù)庫(kù)與SQL基礎(chǔ)_第1頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)與應(yīng)用技術(shù)》課件 第2章 MySQL數(shù)據(jù)庫(kù)與SQL基礎(chǔ)_第2頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)與應(yīng)用技術(shù)》課件 第2章 MySQL數(shù)據(jù)庫(kù)與SQL基礎(chǔ)_第3頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)與應(yīng)用技術(shù)》課件 第2章 MySQL數(shù)據(jù)庫(kù)與SQL基礎(chǔ)_第4頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)與應(yīng)用技術(shù)》課件 第2章 MySQL數(shù)據(jù)庫(kù)與SQL基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

MySQL數(shù)據(jù)庫(kù)與SQL基礎(chǔ)主講:何廣贏時(shí)間:2026/01/01CONTENTS目錄2.1MySQL數(shù)據(jù)庫(kù)操作環(huán)境MySQL簡(jiǎn)介·核心特點(diǎn)·技術(shù)優(yōu)勢(shì)·安裝與工具2.2SQL概述及功能數(shù)據(jù)庫(kù)語(yǔ)言演進(jìn)·SQL誕生與發(fā)展·五大特點(diǎn)·三級(jí)模式·四大功能2.3MySQL數(shù)據(jù)類型數(shù)值類型·字符類型·二進(jìn)制類型·日期類型2.4MySQL運(yùn)算符和表達(dá)式算術(shù)運(yùn)算符·比較運(yùn)算符·邏輯運(yùn)算符·非符號(hào)運(yùn)算符·優(yōu)先級(jí)2.5MySQL常用函數(shù)比較函數(shù)·數(shù)值函數(shù)·字符函數(shù)·日期函數(shù)2.6本章小結(jié)知識(shí)回顧·最佳實(shí)踐·學(xué)習(xí)路徑·案例分析2.1MySQL數(shù)據(jù)庫(kù)操作環(huán)境01MYSQLOVERVIEWMySQL數(shù)據(jù)庫(kù)簡(jiǎn)介核心定位MySQL是當(dāng)前非常流行的開源關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),使用C語(yǔ)言和C++開發(fā),采用CMake編譯。作為Web應(yīng)用中最廣泛使用的數(shù)據(jù)庫(kù)之一,MySQL以其高性能、高可靠性和易用性著稱。開發(fā)與維護(hù)現(xiàn)由Oracle公司開發(fā)、發(fā)布及提供支持,確保產(chǎn)品的持續(xù)更新與技術(shù)支持。MariaDB分支MariaDB是MySQL的一個(gè)分支,由開源社區(qū)維護(hù),采用GPL授權(quán)許可,保持與MySQL的API和命令行兼容。版本獲取MySQL最新版本可以從官方網(wǎng)站下載:教學(xué)版本本書以MySQL8.0社區(qū)版本為例進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用知識(shí)的講解,該版本功能完善、穩(wěn)定可靠。KEYCHARACTERISTICSMySQL的核心特點(diǎn)01數(shù)據(jù)庫(kù)管理系統(tǒng)MySQL是一個(gè)完整的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),提供數(shù)據(jù)存儲(chǔ)、管理、查詢等全方位功能,確保數(shù)據(jù)的安全性、完整性和一致性。02關(guān)系型數(shù)據(jù)庫(kù)MySQL采用關(guān)系型數(shù)據(jù)模型,數(shù)據(jù)以表格形式組織,支持SQL(結(jié)構(gòu)化查詢語(yǔ)言)進(jìn)行數(shù)據(jù)操作,表與表之間可以建立關(guān)聯(lián)關(guān)系。03開源免費(fèi)MySQL遵循GPL協(xié)議,開源且免費(fèi)獲取,用戶可根據(jù)需要修改源代碼。商業(yè)許可:如需規(guī)避GPL約束或商業(yè)應(yīng)用,可向Oracle購(gòu)買商業(yè)許可04靈活的部署模式MySQL既可以在客戶機(jī)/服務(wù)器模式下使用,支持遠(yuǎn)程訪問和并發(fā)處理;也可以嵌入到應(yīng)用系統(tǒng)中,作為輕量級(jí)數(shù)據(jù)庫(kù)解決方案。核心特點(diǎn)總結(jié)DBMS數(shù)據(jù)庫(kù)系統(tǒng)RDBMS關(guān)系型OpenSource開源免費(fèi)Multi-mode多模式部署TECHNICALADVANTAGESMySQL的技術(shù)優(yōu)勢(shì)跨平臺(tái)支持MySQL支持多種主流服務(wù)器平臺(tái),包括Windows、Linux、macOS等,具有良好的跨平臺(tái)特性。優(yōu)勢(shì):應(yīng)用系統(tǒng)可以在不同操作系統(tǒng)間無(wú)縫遷移,無(wú)需修改數(shù)據(jù)庫(kù)代碼SQL標(biāo)準(zhǔn)化MySQL支持結(jié)構(gòu)化查詢語(yǔ)言SQL,這是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,降低了學(xué)習(xí)成本。優(yōu)勢(shì):只要會(huì)用SQL,就能快速掌握MySQL,技能可遷移到其他關(guān)系數(shù)據(jù)庫(kù)成本優(yōu)勢(shì)MySQL是開源免費(fèi)的數(shù)據(jù)庫(kù)系統(tǒng),用戶可以免費(fèi)獲取和使用,極大降低了開發(fā)成本。優(yōu)勢(shì):特別適合中小企業(yè)和個(gè)人開發(fā)者,減少軟件采購(gòu)成本高并發(fā)處理MySQL支持客戶機(jī)/服務(wù)器模式,能并發(fā)處理多用戶訪問,提供高性能的并發(fā)服務(wù)。優(yōu)勢(shì):通過優(yōu)化的存儲(chǔ)引擎和查詢緩存,支持?jǐn)?shù)千個(gè)并發(fā)連接多語(yǔ)言支持MySQL支持多種開發(fā)語(yǔ)言,包括C++、Java、PHP、Python等。優(yōu)勢(shì):提供豐富的API接口和驅(qū)動(dòng)庫(kù),無(wú)縫集成各類應(yīng)用開發(fā)框架性能與擴(kuò)展MySQL采用優(yōu)化的存儲(chǔ)引擎架構(gòu)(如InnoDB),支持事務(wù)處理、行級(jí)鎖定、外鍵約束等高級(jí)特性。優(yōu)勢(shì):支持主從復(fù)制、分區(qū)表、查詢優(yōu)化等高可用和擴(kuò)展方案INSTALLATION&TOOLSMySQL數(shù)據(jù)庫(kù)的安裝安裝步驟1從官網(wǎng)下載MySQL8.0社區(qū)版安裝包2運(yùn)行安裝向?qū)?,選擇安裝類型(開發(fā)者/服務(wù)器/自定義)3配置服務(wù)器實(shí)例(端口、服務(wù)名、字符集等)4設(shè)置root用戶密碼,創(chuàng)建用戶賬戶5完成安裝,啟動(dòng)MySQL服務(wù)配置要點(diǎn)默認(rèn)端口:3306字符集推薦:utf8mb4存儲(chǔ)引擎:InnoDB安全配置:設(shè)置強(qiáng)密碼,限制遠(yuǎn)程訪問常用圖形化管理工具圖形化管理工具讓用戶通過圖形化界面進(jìn)行數(shù)據(jù)庫(kù)管理,包括創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建數(shù)據(jù)表、修改數(shù)據(jù)庫(kù)、刪除數(shù)據(jù)表、數(shù)據(jù)查詢等操作,極大提高了工作效率。MySQLWorkbench官方出品,功能強(qiáng)大,支持?jǐn)?shù)據(jù)庫(kù)設(shè)計(jì)、開發(fā)、管理一體化Navicat界面友好,支持多種數(shù)據(jù)庫(kù),商業(yè)軟件功能全面SQLyog輕量級(jí)工具,啟動(dòng)快速,適合日常查詢和維護(hù)工具選擇建議初學(xué)者:推薦使用MySQLWorkbench,免費(fèi)且功能完整,文檔豐富企業(yè)用戶:推薦Navicat,支持團(tuán)隊(duì)協(xié)作,提供高級(jí)功能2.2SQL概述及功能02LANGUAGEEVOLUTION數(shù)據(jù)庫(kù)語(yǔ)言的演進(jìn)發(fā)展歷程早期的數(shù)據(jù)庫(kù)系統(tǒng)直接面向終端用戶,為了方便操作,系統(tǒng)提供了一套操作指令集。隨著數(shù)據(jù)庫(kù)技術(shù)的發(fā)展,這些指令集逐漸演化為了操作數(shù)據(jù)庫(kù)的語(yǔ)言。數(shù)據(jù)庫(kù)語(yǔ)言主要包括數(shù)據(jù)定義和數(shù)據(jù)操縱兩大核心功能模塊?,F(xiàn)代演進(jìn)隨著數(shù)據(jù)庫(kù)系統(tǒng)成為應(yīng)用系統(tǒng)的數(shù)據(jù)存儲(chǔ)組件,開始出現(xiàn)操作數(shù)據(jù)庫(kù)的調(diào)用接口API(ApplicationProgrammingInterface,應(yīng)用程序接口)。雖然有些數(shù)據(jù)庫(kù)系統(tǒng)提供調(diào)用接口支持,但大部分依然提供對(duì)SQL的支持,如NoSQL數(shù)據(jù)庫(kù)也逐漸增加SQL接口。1.數(shù)據(jù)定義子語(yǔ)言(DDL)數(shù)據(jù)定義子語(yǔ)言(DataDefinitionLanguage)用來(lái)定義數(shù)據(jù)庫(kù)模式,包括數(shù)據(jù)庫(kù)模式定義、存儲(chǔ)結(jié)構(gòu)和存取方法定義,以及數(shù)據(jù)庫(kù)模式的修改和刪除功能。處理流程:DDL處理程序接收用DDL表示的數(shù)據(jù)模式定義,轉(zhuǎn)換為內(nèi)部表示形式,存儲(chǔ)到數(shù)據(jù)字典中,并在存儲(chǔ)設(shè)備上創(chuàng)建相關(guān)的數(shù)據(jù)庫(kù)文件,建立物理數(shù)據(jù)庫(kù)。2.數(shù)據(jù)操縱子語(yǔ)言(DML)數(shù)據(jù)操縱子語(yǔ)言(DataManipulationLanguage)用來(lái)表示用戶對(duì)數(shù)據(jù)庫(kù)的操作請(qǐng)求,通常包括查詢、插入、刪除、修改四種核心操作。過程性語(yǔ)言要求說(shuō)明需要什么數(shù)據(jù)和怎樣搜索數(shù)據(jù)非過程性語(yǔ)言只需說(shuō)明需要什么數(shù)據(jù),無(wú)需說(shuō)明搜索過程特點(diǎn)對(duì)比:非過程性語(yǔ)言比過程性語(yǔ)言易學(xué)易懂,但產(chǎn)生的處理程序代碼效率相對(duì)較低。DML的核心是數(shù)據(jù)查詢,因此有時(shí)也稱為數(shù)據(jù)查詢語(yǔ)言。SQLHISTORYSQL的誕生與發(fā)展1974SEQUEL誕生IBM公司的研究員Boyce和Chamberlin開發(fā)了SEQUEL(StructuredEnglishQueryLanguage),并在IBM研發(fā)的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)SystemR上成功實(shí)現(xiàn)。SEQUEL是SQL的前身,奠定了結(jié)構(gòu)化查詢語(yǔ)言的基礎(chǔ)。后續(xù)SQL正式發(fā)布在SEQUEL基礎(chǔ)上推出了SQL(StructuredQueryLanguage,結(jié)構(gòu)化查詢語(yǔ)言),將數(shù)據(jù)定義和數(shù)據(jù)操縱功能集成為一體的典型數(shù)據(jù)庫(kù)語(yǔ)言。SQL語(yǔ)言設(shè)計(jì)簡(jiǎn)潔、功能強(qiáng)大,迅速獲得了業(yè)界的認(rèn)可。1986美國(guó)標(biāo)準(zhǔn)美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)批準(zhǔn)將SQL作為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的美國(guó)標(biāo)準(zhǔn),同年公布了SQL標(biāo)準(zhǔn)文本(SQL-86)。SQL-86的發(fā)布標(biāo)志著SQL語(yǔ)言正式成為美國(guó)國(guó)家標(biāo)準(zhǔn)。1987-1989國(guó)際標(biāo)準(zhǔn)與完善1987年,國(guó)際標(biāo)準(zhǔn)化組織(ISO)也通過了SQL標(biāo)準(zhǔn),使其成為國(guó)際標(biāo)準(zhǔn)。1989年發(fā)布的SQL-89對(duì)SQL進(jìn)行了進(jìn)一步修改和完善。SQL-89的發(fā)布標(biāo)志著SQL在推動(dòng)數(shù)據(jù)庫(kù)技術(shù)發(fā)展中的重要地位。SQLCHARACTERISTICSSQL的五大特點(diǎn)01功能綜合風(fēng)格統(tǒng)一SQL集數(shù)據(jù)定義DDL、數(shù)據(jù)操縱DML、數(shù)據(jù)查詢DQL和數(shù)據(jù)控制DCL功能于一體,語(yǔ)言風(fēng)格統(tǒng)一,可獨(dú)立完成數(shù)據(jù)庫(kù)生命周期的所有活動(dòng)。02高度非過程化SQL是高度非過程化語(yǔ)言,進(jìn)行數(shù)據(jù)操作時(shí)只需指出想要的結(jié)果,無(wú)需給出操作處理過程。存取路徑的選擇和SQL的操作過程由數(shù)據(jù)庫(kù)系統(tǒng)自動(dòng)完成,提高了數(shù)據(jù)獨(dú)立性。03面向集合的操作方式SQL采用集合操作方式,不僅操作對(duì)象、查找結(jié)果可以是記錄的集合,而且插入、刪除、修改操作的對(duì)象也可以是記錄的集合,支持批量數(shù)據(jù)處理。04兩種使用方式一種方式是用戶直接通過命令行窗口或圖形化管理工具使用SQL對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作(自含式語(yǔ)言);另一種方式是將SQL語(yǔ)言嵌入到高級(jí)語(yǔ)言程序中(嵌入式語(yǔ)言)。05語(yǔ)言簡(jiǎn)潔、易學(xué)易用SQL雖然功能強(qiáng)大,但只用了9個(gè)核心動(dòng)詞,語(yǔ)言簡(jiǎn)潔明了,易于學(xué)習(xí)和使用。主要分為數(shù)據(jù)查詢、數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制四類。數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATEDROPALTER數(shù)據(jù)操縱INSERTUPDATEDELETE數(shù)據(jù)控制GRANTREVOKETHREE-LEVELSCHEMASQL的三級(jí)模式結(jié)構(gòu)外外模式用戶視圖層對(duì)應(yīng)組件VIEW(視圖)視圖是從基本表或其他視圖中導(dǎo)出的表,本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)中只存放視圖的定義而不存放視圖對(duì)應(yīng)的數(shù)據(jù)。核心特性視圖是一個(gè)虛表,數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中,用戶可以像操作基本表一樣對(duì)視圖進(jìn)行查詢。概模式邏輯結(jié)構(gòu)層對(duì)應(yīng)組件BASETABLE(基本表)基本表是獨(dú)立存在的,在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中一個(gè)關(guān)系就對(duì)應(yīng)一個(gè)基本表,一個(gè)或多個(gè)基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件。核心特性基本表是獨(dú)立存在的關(guān)系,用戶可以對(duì)其執(zhí)行查詢、插入、更新、刪除等各種操作。內(nèi)內(nèi)模式物理存儲(chǔ)層對(duì)應(yīng)組件STOREDFILE(存儲(chǔ)文件)存儲(chǔ)文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫(kù)的內(nèi)模式,一個(gè)表可以帶若干索引,索引也存放在存儲(chǔ)文件中。核心特性存儲(chǔ)文件的物理結(jié)構(gòu)由數(shù)據(jù)庫(kù)管理系統(tǒng)設(shè)計(jì)確定,對(duì)用戶透明,用戶無(wú)需關(guān)心底層存儲(chǔ)細(xì)節(jié)。核心要點(diǎn):用戶可以用SQL對(duì)視圖和基本表進(jìn)行查詢。在用戶眼中,視圖和基本表都是關(guān)系,用戶可以在視圖上再定義視圖,形成多層次的數(shù)據(jù)抽象體系。SQLFUNCTIONSSQL四大功能分類數(shù)據(jù)查詢DQLDataQueryLanguage核心動(dòng)詞SELECT用于數(shù)據(jù)表記錄的查詢,提供強(qiáng)大的數(shù)據(jù)查詢功能,是SQL中使用頻率最高的語(yǔ)言。支持單表查詢、多表連接查詢支持條件篩選、排序、分組統(tǒng)計(jì)支持子查詢、聚合函數(shù)、窗口函數(shù)數(shù)據(jù)定義DDLDataDefinitionLanguage核心動(dòng)詞CREATEDROPALTER用來(lái)定義數(shù)據(jù)庫(kù)模式、表、視圖、索引等數(shù)據(jù)庫(kù)對(duì)象,建立數(shù)據(jù)庫(kù)的整體結(jié)構(gòu)。CREATE:創(chuàng)建數(shù)據(jù)庫(kù)、表、視圖、索引DROP:刪除數(shù)據(jù)庫(kù)、表、視圖、索引ALTER:修改表結(jié)構(gòu)(增加、刪除、修改列)數(shù)據(jù)操縱DMLDataManipulationLanguage核心動(dòng)詞INSERTUPDATEDELETE用于對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的添加、刪除、修改等操作,管理表中的數(shù)據(jù)記錄。INSERT:向表中插入新的數(shù)據(jù)記錄UPDATE:修改表中已有數(shù)據(jù)記錄DELETE:從表中刪除數(shù)據(jù)記錄數(shù)據(jù)控制DCLDataControlLanguage核心動(dòng)詞GRANTREVOKE用于對(duì)數(shù)據(jù)庫(kù)中用戶的授權(quán)和權(quán)限回收操作,控制用戶對(duì)數(shù)據(jù)庫(kù)資源的訪問權(quán)限。GRANT:授予用戶特定權(quán)限REVOKE:回收用戶特定權(quán)限保證數(shù)據(jù)庫(kù)安全性,防止未授權(quán)訪問2.3MySQL數(shù)據(jù)類型03NUMERICTYPES數(shù)值類型概覽數(shù)值類型說(shuō)明MySQL支持標(biāo)準(zhǔn)SQL類型,同時(shí)提供自己專用的數(shù)據(jù)類型。為了方便數(shù)據(jù)遷移到其他數(shù)據(jù)庫(kù),建議優(yōu)先使用標(biāo)準(zhǔn)SQL中的數(shù)據(jù)類型。數(shù)值類型中常用的類型有整數(shù)類型INT、小數(shù)類型DECIMAL等,數(shù)據(jù)類型不區(qū)分大小寫。表2.1常用的數(shù)值類型類型大?。ㄗ止?jié))說(shuō)明INT4取值范圍[-2,147,483,648,2,147,483,647]BIGINT8取值范圍[-2^63,2^63],存放較大整數(shù)值SMALLINT2取值范圍[-32,768,32,768],存放較小整數(shù)值FLOAT4單精度浮點(diǎn)數(shù)DOUBLE8雙精度浮點(diǎn)數(shù),存儲(chǔ)高精度小數(shù)值NUMERIC(p,d)4定點(diǎn)數(shù),p位數(shù)字,小數(shù)點(diǎn)后d位DECIMAL(p,d)4同NUMERIC,定點(diǎn)數(shù),精度更高類型選擇建議整數(shù)類型根據(jù)數(shù)值范圍選擇INT、BIGINT或SMALLINT金額計(jì)算推薦使用DECIMAL,避免浮點(diǎn)數(shù)精度問題科學(xué)計(jì)算使用FLOAT或DOUBLE,精度要求高用DOUBLE注意事項(xiàng)超出取值范圍會(huì)報(bào)錯(cuò)或截?cái)郩NSIGNED可擴(kuò)大正數(shù)范圍ZEROFILL可填充前導(dǎo)零INTEGERTYPES整數(shù)類型詳解INT整數(shù)類型存儲(chǔ)空間4字節(jié)(32位)占用4個(gè)字節(jié)(32位),是比較常用的數(shù)據(jù)類型,適合存儲(chǔ)一般大小的整數(shù)。取值范圍最小值-2,147,483,648~最大值2,147,483,647應(yīng)用場(chǎng)景用戶ID、訂單號(hào)、年齡、數(shù)量等常規(guī)整數(shù)BIGINT大整數(shù)類型存儲(chǔ)空間8字節(jié)(64位)占用8個(gè)字節(jié)(64位),也稱長(zhǎng)整型,用來(lái)存儲(chǔ)較大的整數(shù)。取值范圍最小值-2^63~最大值2^63應(yīng)用場(chǎng)景大數(shù)據(jù)量表的自增ID、時(shí)間戳、統(tǒng)計(jì)計(jì)數(shù)SMALLINT小整數(shù)類型存儲(chǔ)空間2字節(jié)(16位)占用2個(gè)字節(jié)(16位),也稱短整型,用來(lái)存儲(chǔ)較小的整數(shù),節(jié)省存儲(chǔ)空間。取值范圍最小值-32,768~最大值32,768應(yīng)用場(chǎng)景狀態(tài)標(biāo)識(shí)、性別、小范圍計(jì)數(shù)、節(jié)省存儲(chǔ)空間選擇原則:根據(jù)實(shí)際數(shù)據(jù)范圍選擇合適類型,既要滿足需求又要節(jié)省空間。INT是最常用的整數(shù)類型,BIGINT適合大數(shù)據(jù)場(chǎng)景,SMALLINT適合小范圍數(shù)據(jù)。FLOATINGPOINT&DECIMAL浮點(diǎn)數(shù)與定點(diǎn)數(shù)FLOAT存儲(chǔ)空間4字節(jié)(32位)精度類型單精度約7位有效數(shù)字單精度浮點(diǎn)數(shù),占用4個(gè)字節(jié)(32位),適合存儲(chǔ)精度要求不高的小數(shù)。DOUBLE存儲(chǔ)空間8字節(jié)(64位)精度類型雙精度約15位有效數(shù)字雙精度浮點(diǎn)數(shù),占用8個(gè)字節(jié)(64位),與FLOAT相比可以存儲(chǔ)具有更高精度的小數(shù)值。NUMERIC(p,d)參數(shù)說(shuō)明p:總位數(shù)(不包括符號(hào)、小數(shù)點(diǎn))d:小數(shù)點(diǎn)后的位數(shù)定點(diǎn)數(shù),占用4個(gè)字節(jié)(32位),提供精確的數(shù)值表示,適合金額計(jì)算場(chǎng)景。DECIMAL(p,d)與NUMERIC關(guān)系與NUMERIC類似,也是定點(diǎn)數(shù),由p位數(shù)字組成,小數(shù)點(diǎn)后面有d位數(shù)字,占用4個(gè)字節(jié)(32位)。在MySQL中,NUMERIC和DECIMAL實(shí)現(xiàn)相同的功能,建議統(tǒng)一使用DECIMAL。重要提示:浮點(diǎn)數(shù)存在精度誤差,不適合金額等精確計(jì)算場(chǎng)景。DECIMAL是精確表示,推薦用于財(cái)務(wù)數(shù)據(jù)。FLOAT適合科學(xué)計(jì)算,DOUBLE適合高精度數(shù)值。CHARACTERTYPES字符類型概覽表2.2常用的字符類型類型大?。ㄗ止?jié))說(shuō)明CHAR(n)n固定長(zhǎng)度為n的字符串,n取值[0,255]VARCHAR(n)n可變長(zhǎng)度為n的字符串,n最大取65535TEXT-可變長(zhǎng)度字符串,最大長(zhǎng)度65535定CHAR(n)固定長(zhǎng)度字符串,可以包含字符、數(shù)字和特殊字符,n表示最大長(zhǎng)度。存儲(chǔ)特性不足長(zhǎng)度用空格填充,可能造成空間浪費(fèi)變VARCHAR(n)可變長(zhǎng)度字符串,可以存儲(chǔ)長(zhǎng)度可變的字符串,沒有填充。存儲(chǔ)特性存儲(chǔ)大小等于實(shí)際長(zhǎng)度,空間效率高長(zhǎng)TEXT長(zhǎng)文本字符串,最大長(zhǎng)度65535字節(jié),適合存儲(chǔ)大段文本。存儲(chǔ)特性可變長(zhǎng)度,適合文章內(nèi)容、描述等推薦使用VARCHAR由于其大小可變的特性,雖然性能略低于CHAR,但存儲(chǔ)空間較小,在實(shí)際工作中比較常用??臻g利用率高靈活性好適用場(chǎng)景廣泛選擇建議定長(zhǎng)數(shù)據(jù)如郵政編碼、身份證號(hào),用CHAR變長(zhǎng)數(shù)據(jù)如姓名、地址、郵箱,用VARCHAR長(zhǎng)文本如文章內(nèi)容、評(píng)論,用TEXTCHARVSVARCHARCHARvsVARCHAR深度對(duì)比定CHAR(n)固定長(zhǎng)度字符串存儲(chǔ)機(jī)制固定長(zhǎng)度字符串,無(wú)論實(shí)際內(nèi)容長(zhǎng)度如何,都會(huì)占用n個(gè)字節(jié)的存儲(chǔ)空間。示例:CHAR(10)存儲(chǔ)'abc',實(shí)際占用10字節(jié),后7字節(jié)用空格填充性能特點(diǎn)由于長(zhǎng)度固定,性能優(yōu)于VARCHAR,不需要計(jì)算實(shí)際長(zhǎng)度和額外的長(zhǎng)度存儲(chǔ)開銷,適合頻繁更新的場(chǎng)景??臻g效率如果存儲(chǔ)不定長(zhǎng)度的數(shù)據(jù)會(huì)導(dǎo)致空間浪費(fèi),因?yàn)椴蛔汩L(zhǎng)度的部分會(huì)用空格填充。適用場(chǎng)景長(zhǎng)度固定的數(shù)據(jù)(如身份證號(hào)、郵政編碼)頻繁更新的表,減少碎片產(chǎn)生對(duì)查詢性能要求高的場(chǎng)景變VARCHAR(n)可變長(zhǎng)度字符串存儲(chǔ)機(jī)制可變長(zhǎng)度字符串,存儲(chǔ)大小等于字符串的實(shí)際長(zhǎng)度,最多可以存儲(chǔ)n個(gè)字符。示例:VARCHAR(10)存儲(chǔ)'abc',實(shí)際占用3字節(jié)(或加上長(zhǎng)度字節(jié))性能特點(diǎn)由于長(zhǎng)度可變,性能不如CHAR,需要額外的1-2字節(jié)存儲(chǔ)長(zhǎng)度信息,更新時(shí)可能產(chǎn)生碎片??臻g效率存儲(chǔ)空間較小,按實(shí)際長(zhǎng)度存儲(chǔ),沒有空間浪費(fèi),特別適合存儲(chǔ)長(zhǎng)度不確定的數(shù)據(jù)。適用場(chǎng)景長(zhǎng)度可變的數(shù)據(jù)(如姓名、地址、郵箱)對(duì)存儲(chǔ)空間敏感的場(chǎng)景大多數(shù)業(yè)務(wù)字段(在實(shí)際工作中最常用)TEXTTYPETEXT長(zhǎng)文本類型TEXT類型長(zhǎng)文本字符串最大長(zhǎng)度65,535字節(jié)用于存儲(chǔ)可變長(zhǎng)度的長(zhǎng)字符串,最大長(zhǎng)度為65,535字節(jié),適合存儲(chǔ)大段文本內(nèi)容。存儲(chǔ)機(jī)制TEXT類型采用可變長(zhǎng)度存儲(chǔ),實(shí)際占用空間等于內(nèi)容長(zhǎng)度加上少量額外開銷,與VARCHAR類似但支持更長(zhǎng)的文本。典型應(yīng)用場(chǎng)景文章內(nèi)容博客文章、新聞內(nèi)容、產(chǎn)品介紹等大段文字評(píng)論內(nèi)容用戶評(píng)論、留言、反饋等文本信息詳細(xì)描述商品詳情、項(xiàng)目描述、用戶簡(jiǎn)介等代碼/配置存儲(chǔ)JSON、XML、HTML等格式數(shù)據(jù)TEXTvsVARCHARVARCHAR優(yōu)勢(shì)支持索引,查詢性能好,可設(shè)置默認(rèn)值TEXT優(yōu)勢(shì)支持更長(zhǎng)文本(65,535字節(jié)),不受行大小限制選擇建議一般文本用VARCHAR,超長(zhǎng)文本用TEXTBINARYTYPES二進(jìn)制類型概覽表2.3二進(jìn)制類型類型大?。ㄗ止?jié))說(shuō)明BINARY(n)n固定長(zhǎng)度的二進(jìn)制數(shù)據(jù)類型VARBINARY(n)n類似于VARCHAR,但只接受二進(jìn)制數(shù)據(jù)BLOB(n)n二進(jìn)制大對(duì)象,存儲(chǔ)較長(zhǎng)二進(jìn)制字符串BINARY(n)類似于CHAR數(shù)據(jù)類型,但只接受二進(jìn)制字符串或二進(jìn)制數(shù)據(jù),固定長(zhǎng)度n個(gè)字節(jié)。應(yīng)用場(chǎng)景存儲(chǔ)圖像、文件或序列化對(duì)象VARBINARY(n)類似于VARCHAR數(shù)據(jù)類型,但只接受二進(jìn)制字符串或二進(jìn)制數(shù)據(jù),可變長(zhǎng)度。優(yōu)勢(shì)空間效率高,按實(shí)際長(zhǎng)度存儲(chǔ)BLOB(n)二進(jìn)制大對(duì)象(BinaryLargeObject),用來(lái)存儲(chǔ)較長(zhǎng)的二進(jìn)制字符串。典型應(yīng)用存儲(chǔ)圖像、音頻、PDF等二進(jìn)制文件使用建議BINARY/VARBINARY可以用于存儲(chǔ)圖像、文件或任何序列化對(duì)象,但不建議將這些文件以二進(jìn)制類型存放到數(shù)據(jù)庫(kù)中。推薦方案建議以單獨(dú)的文件存放到磁盤上,數(shù)據(jù)庫(kù)中只存儲(chǔ)文件路徑,方便查找和讀取。BLOB類型說(shuō)明適合場(chǎng)景BLOB適合在數(shù)據(jù)庫(kù)里存儲(chǔ)二進(jìn)制媒體文件,比如圖像和mp3,但在開發(fā)時(shí)文件一般單獨(dú)存放。實(shí)際應(yīng)用該字段很少使用,現(xiàn)代應(yīng)用通常采用文件服務(wù)器存儲(chǔ)二進(jìn)制文件。BLOBAPPLICATIONBLOB類型的應(yīng)用建議BLOB類型特性BinaryLargeObject定義與用途BLOB是二進(jìn)制大對(duì)象,用來(lái)存儲(chǔ)較長(zhǎng)的二進(jìn)制字符串。BLOB適合在數(shù)據(jù)庫(kù)里存儲(chǔ)二進(jìn)制媒體文件,比如圖像、mp3音頻文件、PDF文檔等。技術(shù)特點(diǎn):BLOB類型可以存儲(chǔ)大量二進(jìn)制數(shù)據(jù),最大支持64KB(不同數(shù)據(jù)庫(kù)可能有所差異)實(shí)際使用情況雖然在技術(shù)上可行,但在實(shí)際開發(fā)時(shí)文件一般單獨(dú)存放,不存放到數(shù)據(jù)庫(kù)中,所以該字段很少使用。不推薦方案不建議將大文件以二進(jìn)制類型直接存放到數(shù)據(jù)庫(kù)中性能問題大文件會(huì)占用大量數(shù)據(jù)庫(kù)存儲(chǔ)空間,影響查詢性能備份困難數(shù)據(jù)庫(kù)備份文件會(huì)變得非常龐大,備份和恢復(fù)時(shí)間長(zhǎng)訪問不便文件內(nèi)容需要應(yīng)用程序處理,不能直接訪問推薦方案建議以單獨(dú)的文件存放到磁盤上,數(shù)據(jù)庫(kù)中只存儲(chǔ)文件路徑性能優(yōu)勢(shì)數(shù)據(jù)庫(kù)存儲(chǔ)小,查詢速度快,系統(tǒng)響應(yīng)好便于管理文件可直接訪問,支持CDN加速,方便查找易于擴(kuò)展可使用專門的文件服務(wù)器或?qū)ο蟠鎯?chǔ)服務(wù)DATE&TIMETYPES日期類型概覽表2.4日期類型類型大小格式說(shuō)明DATE3YYYY-MM-DD存儲(chǔ)年、月、日的值TIME3HH:MM:SS存儲(chǔ)小時(shí)、分、秒的值DATETIME8YYYY-MM-DDHH:MM:SS存儲(chǔ)完整日期和時(shí)間DATE存儲(chǔ)空間3字節(jié)日期類型,只存放日期,不存放時(shí)間,存儲(chǔ)年、月、日的值。TIME存儲(chǔ)空間3字節(jié)時(shí)間類型,只存放時(shí)間,存儲(chǔ)小時(shí)、分、秒的值。DATETIME存儲(chǔ)空間8字節(jié)既存放日期又存放時(shí)間,存儲(chǔ)完整日期時(shí)間信息。選擇建議僅需要日期使用DATE,如生日、節(jié)假日僅需要時(shí)間使用TIME,如營(yíng)業(yè)時(shí)間、時(shí)長(zhǎng)需要日期和時(shí)間使用DATETIME,如創(chuàng)建時(shí)間、訂單時(shí)間注意事項(xiàng)MySQL5.6+支持毫秒級(jí)精度考慮時(shí)區(qū)問題,必要時(shí)使用TIMESTAMP日期函數(shù)可方便進(jìn)行計(jì)算和格式化APPLICATIONSCENARIOS日期類型的應(yīng)用場(chǎng)景DATE僅日期生日用戶生日、公司成立紀(jì)念日等節(jié)假日法定節(jié)假日、特殊紀(jì)念日計(jì)劃日期項(xiàng)目開始日期、截止日期歷史日期事件發(fā)生日期、記錄日期TIME僅時(shí)間營(yíng)業(yè)時(shí)間商店開門時(shí)間、關(guān)門時(shí)間持續(xù)時(shí)間任務(wù)預(yù)計(jì)耗時(shí)、活動(dòng)時(shí)長(zhǎng)計(jì)時(shí)數(shù)據(jù)比賽成績(jī)、執(zhí)行時(shí)間統(tǒng)計(jì)提醒時(shí)間每日提醒時(shí)間、定時(shí)任務(wù)DATETIME日期+時(shí)間創(chuàng)建時(shí)間用戶注冊(cè)時(shí)間、記錄創(chuàng)建時(shí)間訂單時(shí)間訂單創(chuàng)建時(shí)間、支付時(shí)間更新時(shí)間記錄最后修改時(shí)間、日志時(shí)間交易時(shí)間轉(zhuǎn)賬時(shí)間、交易完成時(shí)間2.4MySQL運(yùn)算符和表達(dá)式04ARITHMETICOPERATORS算術(shù)運(yùn)算符總覽算術(shù)運(yùn)算符說(shuō)明算術(shù)運(yùn)算符主要用于數(shù)學(xué)運(yùn)算,可以直接對(duì)數(shù)據(jù)庫(kù)表中的字段值進(jìn)行算術(shù)運(yùn)算,實(shí)現(xiàn)數(shù)據(jù)的計(jì)算和處理。包括加、減、乘、除、取模五種基本運(yùn)算,運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中計(jì)算的先后順序。表2.5算術(shù)運(yùn)算符運(yùn)算符名稱說(shuō)明+加計(jì)算兩個(gè)值或表達(dá)式的和-減計(jì)算兩個(gè)值或表達(dá)式的差*乘計(jì)算兩個(gè)值或表達(dá)式的乘積/除計(jì)算兩個(gè)值或表達(dá)式的商%求余/求模計(jì)算兩個(gè)值或表達(dá)式的余數(shù)加法運(yùn)算用于數(shù)值相加,字符串會(huì)嘗試轉(zhuǎn)換為數(shù)值進(jìn)行運(yùn)算,NULL參與運(yùn)算結(jié)果為NULL。減法運(yùn)算用于數(shù)值相減,可用于日期計(jì)算(如計(jì)算兩個(gè)日期間隔天數(shù))。乘法運(yùn)算用于數(shù)值相乘,適合計(jì)算總金額、統(tǒng)計(jì)匯總等場(chǎng)景。重要提示:在SQL中,"+"只表示加運(yùn)算符,會(huì)將字符串轉(zhuǎn)換為數(shù)值進(jìn)行運(yùn)算,沒有字符串連接功能。兩個(gè)字符串相連接需要使用CONCAT()函數(shù)。ADDITION&SUBTRACTION加減運(yùn)算規(guī)則加法運(yùn)算規(guī)則規(guī)則1:整數(shù)±整數(shù)=整數(shù)SELECT5+3;結(jié)果為8整數(shù)類型值對(duì)整數(shù)進(jìn)行加法,結(jié)果還是整數(shù)規(guī)則2:整數(shù)±浮點(diǎn)數(shù)=浮點(diǎn)數(shù)SELECT5+3.14;結(jié)果為8.14整數(shù)類型值對(duì)浮點(diǎn)數(shù)進(jìn)行加法,結(jié)果是浮點(diǎn)數(shù)規(guī)則3:字符串自動(dòng)轉(zhuǎn)換SELECT5+'5';結(jié)果為10字符串'5'轉(zhuǎn)換為整數(shù)5參與運(yùn)算規(guī)則4:NULL參與運(yùn)算SELECT5+NULL;結(jié)果為NULLNULL參與任何運(yùn)算,結(jié)果都是NULL減法運(yùn)算規(guī)則減法運(yùn)算遵循與加法相同的規(guī)則,優(yōu)先級(jí)相同,都是從左到右依次計(jì)算。實(shí)際應(yīng)用示例UPDATEdoctorSETWorkingYears=WorkingYears+1;將doctor表中所有人的工作年限加1注意事項(xiàng)優(yōu)先級(jí)加法和減法優(yōu)先級(jí)相同,低于乘除類型轉(zhuǎn)換非數(shù)字字符串轉(zhuǎn)換為0參與運(yùn)算字符串連接SQL中不能使用+連接字符串MULTIPLICATION,DIVISION&MODULO乘除與求模運(yùn)算乘法運(yùn)算規(guī)則一個(gè)數(shù)乘以浮點(diǎn)數(shù)1后變成浮點(diǎn)數(shù),結(jié)果的數(shù)據(jù)類型取決于操作數(shù)類型。SELECT5*1.0;結(jié)果為5.0整數(shù)乘以浮點(diǎn)數(shù)結(jié)果為浮點(diǎn)數(shù)優(yōu)先級(jí)乘法和除法的優(yōu)先級(jí)相同,高于加減法,低于括號(hào)。除法運(yùn)算規(guī)則一個(gè)數(shù)除以整數(shù)后,不管是否能除盡,結(jié)果都為一個(gè)浮點(diǎn)數(shù)。SELECT10/4;結(jié)果為2.5整數(shù)除以整數(shù)結(jié)果為浮點(diǎn)數(shù)特殊處理一個(gè)數(shù)除以0結(jié)果為NULL,避免了數(shù)學(xué)上的除零錯(cuò)誤。求模運(yùn)算定義求模就是求余數(shù),返回第一個(gè)操作數(shù)除以第二個(gè)操作數(shù)后的余數(shù)。SELECT10MOD3;結(jié)果為110除以3余數(shù)為1應(yīng)用常用于判斷奇偶性、循環(huán)分組、分頁(yè)計(jì)算等場(chǎng)景。實(shí)用技巧:乘除運(yùn)算優(yōu)先級(jí)高于加減,可以使用括號(hào)改變運(yùn)算順序。求模運(yùn)算可以用MOD函數(shù)或%運(yùn)算符,兩者功能相同。COMPARISONOPERATORS比較運(yùn)算符總覽表2.6比較運(yùn)算符運(yùn)算符名稱說(shuō)明=等于運(yùn)算符判斷兩個(gè)值或表達(dá)式是否相等<>或!=不等于運(yùn)算符判斷兩個(gè)值或表達(dá)式是否不相等<小于運(yùn)算符判斷前面的值是否小于后面的值<=小于等于運(yùn)算符判斷前面的值是否小于等于后面的值>大于運(yùn)算符判斷前面的值是否大于后面的值>=大于等于運(yùn)算符判斷前面的值是否大于等于后面的值返回結(jié)果說(shuō)明1比較結(jié)果為真0比較結(jié)果為假NULL其他情況主要應(yīng)用比較運(yùn)算符經(jīng)常被用在SELECT查詢語(yǔ)句的條件中,返回符合條件的結(jié)果記錄,是數(shù)據(jù)篩選的核心工具。典型場(chǎng)景精確匹配查詢范圍篩選查詢不等值排除查詢NULL處理核心規(guī)則如果比較的兩邊有任意一個(gè)為NULL,或者兩邊都為NULL,比較結(jié)果為NULL,而不是TRUE或FALSE。EQUALOPERATOR等于運(yùn)算符的匹配規(guī)則=等于運(yùn)算符等號(hào)運(yùn)算符等號(hào)運(yùn)算符(=)判斷等號(hào)兩邊的值、字符串或表達(dá)式是否相等,如果相等則返回1,不相等則返回0。1字符串比較規(guī)則如果等號(hào)兩邊都為字符串,則MySQL會(huì)按照字符串進(jìn)行比較,比較的是每個(gè)字符的編碼。2整數(shù)比較規(guī)則如果等號(hào)兩邊都是整數(shù),則MySQL會(huì)按照整數(shù)來(lái)比較兩個(gè)值的大小。3混合類型比較如果一邊是整數(shù),另一邊是字符串,則MySQL會(huì)將字符串轉(zhuǎn)化為數(shù)字進(jìn)行比較。4NULL值處理如果等號(hào)兩邊有一個(gè)為NULL,則比較結(jié)果為NULL。查詢示例示例1:數(shù)值相等查詢SELECT*FROMdoctorWHEREWorkingYears=1;查詢工作年限為1年的醫(yī)生信息示例2:字符串相等查詢SELECT*FROMdoctorWHEREGender='男';查詢性別為"男"的醫(yī)生信息SELECT*說(shuō)明SELECT*表示選出某表中的所有字段注意事項(xiàng)字符集影響字符串比較結(jié)果'5'和5在比較時(shí)會(huì)被視為相等避免使用=判斷NULL值OTHERCOMPARISONOPERATORS不等于、大于、小于運(yùn)算符<>不等于運(yùn)算符不等號(hào)運(yùn)算符(<>和!=)用于判斷兩邊的數(shù)字、字符串或者表達(dá)式的值是否不相等,如果不相等則返回1,相等則返回0。示例1:數(shù)值不等查詢SELECT*FROMdoctorWHEREWorkingYears!=1;查詢工作年限不為1的醫(yī)生的所有信息示例2:字符串不等查詢SELECT*FROMdoctorWHEREGender!='男';查詢性別不為"男"的醫(yī)生的所有信息>大于運(yùn)算符判斷前面的值、字符串或表達(dá)式是否大于后面的值、字符串或表達(dá)式,經(jīng)常用于數(shù)值和日期的范圍篩選。示例:大于查詢SELECT*FROMdoctorWHEREWorkingYears>1;查詢工作年限大于1的醫(yī)生的所有信息大于等于查詢SELECT*FROMdoctorWHEREWorkingYears>=1;查詢工作年限大于等于1的醫(yī)生的所有信息<小于運(yùn)算符判斷前面的值、字符串或表達(dá)式是否小于后面的值、字符串或表達(dá)式,與大于運(yùn)算符配合使用實(shí)現(xiàn)范圍查詢。示例:小于查詢SELECT*FROMdoctorWHEREWorkingYears<10;查詢工作年限小于10的醫(yī)生的所有信息小于等于查詢SELECT*FROMdoctorWHEREWorkingYears<=10;查詢工作年限小于等于10的醫(yī)生的所有信息組合應(yīng)用:不等于運(yùn)算符不能判斷NULL值,如果兩邊有NULL則結(jié)果為NULL。大于小于運(yùn)算符經(jīng)常與等于運(yùn)算符配合實(shí)現(xiàn)區(qū)間查詢,如WorkingYears>=3ANDWorkingYears<=10。LOGICALOPERATORS邏輯運(yùn)算符總覽表2.7邏輯運(yùn)算符運(yùn)算符名稱說(shuō)明NOT或!邏輯非不滿足條件時(shí)為真AND或&&邏輯與多個(gè)表達(dá)式的值同時(shí)滿足條件,則結(jié)果為真OR或||邏輯或多個(gè)表達(dá)式的值有一個(gè)滿足即可返回結(jié)果說(shuō)明在MySQL中,邏輯運(yùn)算符的返回結(jié)果為1、0或者NULL,分別對(duì)應(yīng)真、假和未知狀態(tài)。1TRUE0FALSENULLUNKNOWN應(yīng)用場(chǎng)景組合條件查詢使用AND、OR組合多個(gè)查詢條件條件取反使用NOT實(shí)現(xiàn)條件的反向篩選復(fù)雜邏輯構(gòu)建多層次的查詢邏輯優(yōu)先級(jí)說(shuō)明優(yōu)先級(jí)順序NOT>AND>OR,使用括號(hào)可以改變優(yōu)先級(jí),建議復(fù)雜邏輯明確使用括號(hào)。NOT&AND邏輯非與邏輯與運(yùn)算!邏輯非運(yùn)算符NOT或!邏輯非(NOT或!)運(yùn)算符表示當(dāng)給定的值為0時(shí)返回1;當(dāng)給定的值為非0值時(shí)返回0。當(dāng)給定的值為NULL時(shí),返回NULL。真值表輸入0返回1輸入非0值返回0輸入NULL返回NULL查詢示例SELECT*FROMdoctorWHEREGender!='男';從doctor表中選出所有性別不等于"男"的醫(yī)生&&邏輯與運(yùn)算符AND或&&邏輯與(AND或&&)運(yùn)算符是當(dāng)給定的多個(gè)表達(dá)式的所有值均為非0值,并且都不為NULL時(shí),返回1;當(dāng)給定的一個(gè)值或者多個(gè)值為0時(shí)則返回0;否則返回NULL。真值表全為非0值返回1有0值返回0其他情況返回NULL查詢示例SELECT*FROMdoctorWHEREgender='男'ANDWorkingYears>3;從doctor表選出性別為"男"且工作年限大于3的醫(yī)生OROPERATOR邏輯或運(yùn)算||邏輯或運(yùn)算符OR或||邏輯或(OR或||)運(yùn)算符是當(dāng)給定的多個(gè)表達(dá)式的值有任何一個(gè)值為非0值時(shí),返回1,否則返回0。當(dāng)一個(gè)值為NULL,并且另一個(gè)值為非0值時(shí),返回1,否則返回NULL;當(dāng)兩個(gè)值都為NULL時(shí),返回NULL。真值表有非0值返回1全為0返回0含NULL特殊情況見說(shuō)明查詢示例SELECT*FROMdoctorWHEREWorkingYears<3||WorkingYears>10;查找工作年限小于3,或者工作年限大于10的醫(yī)生的所有信息ORvsAND對(duì)比AND同時(shí)滿足條件更嚴(yán)格結(jié)果集更小OR滿足其一條件更寬松結(jié)果集更大使用技巧多條件組合OR適合實(shí)現(xiàn)多值匹配,如多個(gè)狀態(tài)、多個(gè)類型范圍查詢配合比較運(yùn)算符實(shí)現(xiàn)區(qū)間外查詢優(yōu)先級(jí)注意OR優(yōu)先級(jí)低于AND,必要時(shí)使用括號(hào)NON-SYMBOLOPERATORS非符號(hào)運(yùn)算符總覽表2.8非符號(hào)運(yùn)算符運(yùn)算符名稱說(shuō)明ISNULL為空運(yùn)算符判斷值、字符串或表達(dá)式是否為空ISNOTNULL不為空運(yùn)算符判斷值、字符串或表達(dá)式是否不為空BETWEENAND兩值之間的運(yùn)算符判斷一個(gè)值是否在兩個(gè)值之間NOTBETWEENAND不在兩值之間的運(yùn)算符判斷一個(gè)值是否不在兩個(gè)值之間IN屬于運(yùn)算符判斷一個(gè)值是否為列表中的任意一個(gè)值NOTIN不屬于運(yùn)算符判斷一個(gè)值是否不是列表中的任意一個(gè)值LIKE模糊匹配運(yùn)算符判斷一個(gè)值是否符合模糊匹配規(guī)則特點(diǎn)說(shuō)明非符號(hào)運(yùn)算符提供了更直觀、更易讀的條件判斷方式,相比符號(hào)運(yùn)算符語(yǔ)義更明確,代碼可維護(hù)性更好。包括NULL判斷、區(qū)間判斷、多值判斷、模糊匹配等常用功能。優(yōu)勢(shì)特點(diǎn)可讀性強(qiáng)語(yǔ)義清晰,代碼更易理解功能強(qiáng)大涵蓋常用查詢場(chǎng)景易于維護(hù)邏輯清晰,修改方便使用建議NULL判斷優(yōu)先使用ISNULL/ISNOTNULL區(qū)間查詢BETWEENAND比>=AND<=更簡(jiǎn)潔多值匹配IN比多個(gè)OR條件更優(yōu)雅NULLOPERATORSNULL與NOTNULL運(yùn)算符ISNULLISNULL為空運(yùn)算符空運(yùn)算符(ISNULL或ISNULL)判斷一個(gè)值是否為NULL,如果為NULL則返回1,否則返回0。查詢示例1SELECT*FROMdoctorWHEREWorkingYearsISNULL;查詢工作年限為NULL的醫(yī)生的所有信息查詢示例2SELECT*FROMdoctorWHEREDoctorNameISNULL;查詢醫(yī)生姓名為NULL的醫(yī)生的所有信息應(yīng)用場(chǎng)景用于數(shù)據(jù)完整性檢查,找出缺失數(shù)據(jù)的記錄,進(jìn)行數(shù)據(jù)清洗和補(bǔ)充。ISNOTNULLISNOTNULL不為空運(yùn)算符非空運(yùn)算符(ISNOTNULL)判斷一個(gè)值是否不為NULL,如果不為NULL則返回1,否則返回0。查詢示例1SELECT*FROMdoctorWHEREWorkingYearsISNOTNULL;查詢工作年限不為NULL的醫(yī)生的所有信息查詢示例2SELECT*FROMdoctorWHEREDoctorNameISNOTNULL;查詢醫(yī)生姓名不為NULL的醫(yī)生的所有信息應(yīng)用場(chǎng)景篩選出數(shù)據(jù)完整的記錄,確保關(guān)鍵字段都有值,保證業(yè)務(wù)數(shù)據(jù)的完整性。重要區(qū)別:判斷NULL值不能使用=或!=,必須使用ISNULL或ISNOTNULL。=NULL的結(jié)果永遠(yuǎn)是NULL,不會(huì)返回TRUE或FALSE。這是SQL處理NULL值的標(biāo)準(zhǔn)行為。BETWEENOPERATORBETWEEN與NOTBETWEEN運(yùn)算符BETWEENBETWEENAND兩值之間的運(yùn)算符BETWEENAND運(yùn)算符判斷一個(gè)值是否在兩個(gè)值之間,包含邊界值。如果值在指定范圍內(nèi)則返回1,否則返回0。查詢示例SELECT*FROMdoctorWHEREWorkingYearsBETWEEN3AND10;查詢工作年限在3和10之間的醫(yī)生的所有信息(包含3和10)等效表達(dá)式WorkingYears>=3ANDWorkingYears<=10BETWEENAND等價(jià)于大于等于和小于等于的組合NOTBETWEENNOTBETWEEN不在兩值之間的運(yùn)算符NOTBETWEENAND運(yùn)算符判斷一個(gè)值是否不在兩個(gè)值之間,是BETWEENAND的取反操作。如果值不在指定范圍內(nèi)則返回1,否則返回0。查詢示例SELECT*FROMdoctorWHEREWorkingYearsNOTBETWEEN3AND10;查詢工作年限不在3和10之間的醫(yī)生的所有信息等效表達(dá)式WorkingYears<3ORWorkingYears>10NOTBETWEENAND等價(jià)于小于或大于的組合包含邊界BETWEENAND是包含邊界值的,與數(shù)學(xué)上的閉區(qū)間[a,b]等價(jià)。性能對(duì)比BETWEENAND的性能與>=AND<=相同,但可讀性更好。適用類型適用于數(shù)值、日期、字符串等多種數(shù)據(jù)類型的區(qū)間查詢。INOPERATORIN與NOTIN運(yùn)算符ININ運(yùn)算符屬于運(yùn)算符IN運(yùn)算符用于判斷給定的值是否是IN列表中的一個(gè)值,如果是則返回1,否則返回0。如果給定的值為NULL,或者IN列表中存在NULL,則結(jié)果為NULL。示例1:數(shù)值列表查詢SELECT*FROMdoctorWHEREWorkingYearsIN(3,5,10);查詢工作年限為3、5或10的醫(yī)生的所有信息示例2:字符串列表查詢SELECT*FROMdoctorWHERESpecializationIN('外科','內(nèi)科');查詢專業(yè)為外科或內(nèi)科的醫(yī)生的所有信息等效表達(dá)式WorkingYears=3ORWorkingYears=5ORWorkingYears=10IN等價(jià)于多個(gè)等于條件的或組合,但寫法更簡(jiǎn)潔NOTINNOTIN運(yùn)算符不屬于運(yùn)算符NOTIN運(yùn)算符用于判斷給定的值是否不是IN列表中的一個(gè)值,如果不是IN列表中的一個(gè)值,則返回1,否則返回0。示例1:數(shù)值排除查詢SELECT*FROMdoctorWHEREWorkingYearsNOTIN(3,5,10);查詢工作年限不是3、5和10的醫(yī)生的所有信息示例2:字符串排除查詢SELECT*FROMdoctorWHERESpecializationNOTIN('外科','內(nèi)科');查詢專業(yè)不是外科和內(nèi)科的醫(yī)生的所有信息等效表達(dá)式WorkingYears!=3ANDWorkingYears!=5ANDWorkingYears!=10NOTIN等價(jià)于多個(gè)不等于條件的與組合NULL值處理:如果IN列表中存在NULL,或者給定的值為NULL,則結(jié)果為NULL。NOTIN在遇到NULL時(shí)也會(huì)返回NULL,使用時(shí)需要特別注意。LIKEOPERATORLIKE模糊匹配運(yùn)算符LIKE運(yùn)算符模糊匹配運(yùn)算符LIKE運(yùn)算符主要用來(lái)匹配字符串,通常用于模糊匹配,如果滿足條件則返回1,否則返回0。如果給定的值或者匹配條件為NULL,則返回結(jié)果為NULL。通配符說(shuō)明%百分號(hào)匹配0個(gè)或多個(gè)字符_下劃線匹配任意單個(gè)字符示例說(shuō)明a%b:可以是aab、acccb、anotherhoob等a_b:只能是aab、abb、acb、adb等(長(zhǎng)度為3)匹配模式前綴匹配'陳%'匹配以"陳"開頭的任意字符串后綴匹配'%偉'匹配以"偉"結(jié)尾的任意字符串包含匹配'%科技%'匹配包含"科技"的任意字符串固定長(zhǎng)度匹配'陳_'匹配"陳"開頭且長(zhǎng)度為2的字符串使用技巧LIKE匹配區(qū)分大小寫(取決于字符集)通配符在開頭會(huì)導(dǎo)致索引失效模糊查詢性能較差,謹(jǐn)慎使用LIKEEXAMPLESLIKE運(yùn)算符實(shí)戰(zhàn)案例1精確匹配SELECT*FROMdoctorWHERESpecializationLIKE'內(nèi)科';查詢專業(yè)為"內(nèi)科"的醫(yī)生的所有信息SELECT*FROMdoctorWHEREGenderLIKE'男';查詢性別為"男"的醫(yī)生的所有信息2前綴匹配SELECT*FROMdoctorWHEREDoctorNameLIKE'陳%';查詢姓名以"陳"開頭的醫(yī)生的所有信息匹配示例陳明、陳醫(yī)生、陳主任等%通配符匹配0個(gè)或多個(gè)字符,適合實(shí)現(xiàn)前綴搜索功能3后綴匹配SELECT*FROMdoctorWHEREDoctorNameLIKE'%偉';查詢姓名以"偉"結(jié)尾的醫(yī)生的所有信息匹配示例李偉、張偉、陳偉等%通配符放在前面,實(shí)現(xiàn)后綴搜索功能4固定長(zhǎng)度匹配SELECT*FROMdoctorWHEREDoctorNameLIKE'陳_';查詢姓名以"陳"開頭且姓名為兩個(gè)字的醫(yī)生的所有信息匹配示例陳明、陳華、陳剛等(僅匹配2個(gè)字)_通配符只匹配單個(gè)字符,適合實(shí)現(xiàn)固定長(zhǎng)度搜索OPERATORPRECEDENCE運(yùn)算符優(yōu)先級(jí)規(guī)則表2.9運(yùn)算符的優(yōu)先級(jí)(按從高到低排列)優(yōu)先級(jí)1(最高)!優(yōu)先級(jí)2-(負(fù)號(hào))~(按位取反)優(yōu)先級(jí)3^優(yōu)先級(jí)4*/DIV%MOD優(yōu)先級(jí)5-+優(yōu)先級(jí)6<<>>優(yōu)先級(jí)7&優(yōu)先級(jí)8|優(yōu)先級(jí)9=>=><=<<>!=ISLIKEREGEXPIN優(yōu)先級(jí)10BETWEENCASEWHENTHENELSE優(yōu)先級(jí)11NOT優(yōu)先級(jí)12&&AND優(yōu)先級(jí)13XOR優(yōu)先級(jí)14||OR優(yōu)先級(jí)15(最低)=(賦值)優(yōu)先級(jí)規(guī)則說(shuō)明默認(rèn)順序級(jí)別高的運(yùn)算符優(yōu)先計(jì)算,同級(jí)別從左到右括號(hào)優(yōu)先可以使用括號(hào)改變默認(rèn)優(yōu)先級(jí)建議用法復(fù)雜表達(dá)式建議使用括號(hào)明確優(yōu)先級(jí)實(shí)用建議不確定優(yōu)先級(jí)時(shí),使用括號(hào)最保險(xiǎn)括號(hào)使計(jì)算過程更清晰,提高可讀性團(tuán)隊(duì)協(xié)作中,明確優(yōu)先級(jí)很重要PARENTHESESUSAGE括號(hào)改變優(yōu)先級(jí)括號(hào)的作用在無(wú)法確定優(yōu)先級(jí)的情況下,可以使用圓括號(hào)"()"來(lái)改變優(yōu)先級(jí),并且這樣會(huì)使計(jì)算過程更加清晰,提高表達(dá)式的可讀性。示例1:改變運(yùn)算順序5+3*2=11默認(rèn):乘法優(yōu)先,5+6=11(5+3)*2=16加括號(hào):加法優(yōu)先,8*2=16示例2:復(fù)雜條件組合WHERE(AORB)AND(CORD)明確OR和AND的優(yōu)先級(jí)關(guān)系使用建議明確優(yōu)先級(jí)即使知道優(yōu)先級(jí),也建議用括號(hào)明確表達(dá)意圖提高可讀性括號(hào)讓代碼更易理解,減少誤解團(tuán)隊(duì)協(xié)作統(tǒng)一編碼風(fēng)格,方便他人維護(hù)避免錯(cuò)誤減少因優(yōu)先級(jí)理解錯(cuò)誤導(dǎo)致的bug最佳實(shí)踐復(fù)雜表達(dá)式總是使用括號(hào)多層嵌套時(shí)配對(duì)使用括號(hào)不要過度使用,保持簡(jiǎn)潔2.5MySQL常用函數(shù)05COMPARISONFUNCTIONS比較函數(shù)應(yīng)用表2.10比較函數(shù)函數(shù)名稱說(shuō)明LEAST返回一組值中的最小值GREATEST返回一組值中的最大值STRCMP比較兩個(gè)字符串,相等返回0,小于返回-1,大于返回1LEAST函數(shù)返回一組值中的最小值,可以用于數(shù)值和字符串比較。SELECTLEAST(WorkingYears)FROMdoctor;查詢doctor表中工作年限最小的值GREATEST函數(shù)返回一組值中的最大值,與LEAST函數(shù)功能相反。SELECTGREATEST(WorkingYears)FROMdoctor;查詢doctor表中工作年限最大的值STRCMP函數(shù)比較兩個(gè)字符串,返回0(相等)、-1(小于)、1(大于)。SELECTSTRCMP('book','book');返回0SELECTSTRCMP('book1','book2');返回-1SELECTSTRCMP('book3','book2');返回1NUMERICFUNCTIONS數(shù)值型函數(shù)總覽(一)表2.11數(shù)值型函數(shù)(部分)函數(shù)名稱說(shuō)明ABS求絕對(duì)值SQRT求二次方根MOD求余數(shù)RAND生成一個(gè)0~1之間的隨機(jī)數(shù)ROUND對(duì)所傳參數(shù)進(jìn)行四舍五入ABS函數(shù)求絕對(duì)值,返回非負(fù)數(shù)SELECTABS(-1);結(jié)果為1SQRT函數(shù)求二次方根SELECTSQRT(16);結(jié)果為4MOD函數(shù)求余數(shù),同%運(yùn)算符SELECTMOD(10,3);結(jié)果為1RAND函數(shù)生成0~1之間的隨機(jī)數(shù)SELECTRAND();結(jié)果如0.123456ROUND函數(shù)對(duì)參數(shù)進(jìn)行四舍五入SELECTROUND(3.14);結(jié)果為3AGGREGATEFUNCTIONS數(shù)值型函數(shù)總覽(二)表2.11數(shù)值型函數(shù)(續(xù))函數(shù)名稱說(shuō)明MAX查詢指定列的最大值MIN查詢指定列的最小值COUNT統(tǒng)計(jì)查詢結(jié)果的行數(shù)SUM求和,返回指定列的總和AVG求平均值,返回指定列數(shù)據(jù)的平均值MAX函數(shù)查詢指定列的最大值SELECTMAX(WorkingYears)FROMdoctor;MIN函數(shù)查詢指定列的最小值SELECTMIN(WorkingYears)FROMdoctor;COUNT函數(shù)統(tǒng)計(jì)查詢結(jié)果的行數(shù)SELECTCOUNT(*)FROMdoctor;SUM函數(shù)求和,返回指定列的總和SELECTSUM(WorkingYears)FROMdoctor;AVG函數(shù)求平均值SELECTAVG(WorkingYears)FROMdoctor;AGGREGATEFUNCTIONSEXAMPLES聚合函數(shù)實(shí)戰(zhàn)案例MAX函數(shù)應(yīng)用SELECTMAX(WorkingYears)FROMdoctor;查詢doctor表中工作年限最大的值應(yīng)用場(chǎng)景找出最有經(jīng)驗(yàn)的醫(yī)生、最高價(jià)格、最大數(shù)值COUNT函數(shù)應(yīng)用SELECTCOUNT(*)FROMdoctor;查詢doctor表中記錄的行數(shù)應(yīng)用場(chǎng)景統(tǒng)計(jì)總記錄數(shù)、數(shù)據(jù)量統(tǒng)計(jì)、分頁(yè)查詢SUM函數(shù)應(yīng)用SELECTSUM(WorkingYears)FROMdoctor;查詢doctor表中所有人工作年限的總和應(yīng)用場(chǎng)景計(jì)算總銷售額、總庫(kù)存、累計(jì)值A(chǔ)VG函數(shù)應(yīng)用SELECTAVG(WorkingYears)FROMdoctor;查詢doctor表中所有人工作年限的平均值應(yīng)用場(chǎng)景計(jì)算平均工資、平均成績(jī)、均值分析重要特性:聚合函數(shù)(除了COUNT(*))會(huì)忽略NULL值。COUNT(*)統(tǒng)計(jì)所有行,COUNT(column)忽略該列的NULL值。聚合函數(shù)通常與GROUPBY子句配合使用,實(shí)現(xiàn)分組統(tǒng)計(jì)功能。STRINGFUNCTIONS字符型函數(shù)總覽表2.12字符型函數(shù)函數(shù)名稱說(shuō)明LENGTH計(jì)算字符串長(zhǎng)度函數(shù),返回字符串的字節(jié)長(zhǎng)度CONCAT合并字符串函數(shù),返回結(jié)果為連接參數(shù)產(chǎn)生的字符串LOWER將字符串中的字母轉(zhuǎn)換為小寫UPPER將字符串中的字母轉(zhuǎn)換為大寫LEFT從左側(cè)截取字符串,返回字符串左邊的若干個(gè)字符RIGHT從右側(cè)截取字符串,返回字符串右邊的若干個(gè)字符TRIM刪除字符串左右兩側(cè)的空格REPLACE字符串替換函數(shù),返回替換后的新字符串SUBSTRING截取字符串,返回從指定位置開始的指定長(zhǎng)度的字符串REVERSE字符串反轉(zhuǎn)(逆序)函數(shù)字符串函數(shù)特點(diǎn)字符串函數(shù)是MySQL中最常用的函數(shù)類別之一,涵蓋了長(zhǎng)度計(jì)算、字符串連接、大小寫轉(zhuǎn)換、子串截取、空格處理、內(nèi)容替換、順序反轉(zhuǎn)等多種功能,在數(shù)據(jù)處理和格式化輸出中廣泛應(yīng)用。常用場(chǎng)景數(shù)據(jù)驗(yàn)證使用LENGTH檢查密碼長(zhǎng)度、手機(jī)號(hào)長(zhǎng)度字符串處理使用CONCAT拼接全名、地址等信息數(shù)據(jù)清洗使用TRIM去除空格、UPPER統(tǒng)一大小寫內(nèi)容截取使用SUBSTRING、LEFT、RIGHT獲取部分內(nèi)容注意事項(xiàng)LENGTH返回字節(jié)長(zhǎng)度,不是字符數(shù)字符串位置從1開始計(jì)數(shù),不是從0中文字符在UTF-8下占3個(gè)字節(jié)STRINGFUNCTIONSCONCAT與LENGTH函數(shù)應(yīng)用CONCAT函數(shù)合并字符串函數(shù)CONCAT函數(shù)用于連接多個(gè)字符串,返回結(jié)果為連接參數(shù)產(chǎn)生的字符串。參數(shù)可以是一個(gè)或多個(gè),是SQL中實(shí)現(xiàn)字符串連接的標(biāo)準(zhǔn)方式。查詢示例SELECT*FROMdoctorWHEREDoctorName=CONCAT('李','明');查詢名字為李明的醫(yī)生的所有信息重要提示兩個(gè)字符串相連接,在SQL語(yǔ)句中不能使用加號(hào),要使用CONCAT()函數(shù)。這是SQL與編程語(yǔ)言的重要區(qū)別。LENGTH函數(shù)計(jì)算字符串長(zhǎng)度LENGTH函數(shù)計(jì)算字符串的字節(jié)長(zhǎng)度,返回字符串占用的字節(jié)數(shù),而不是字符數(shù)。對(duì)于多字節(jié)字符集(如UTF-8),一個(gè)字符可能占用多個(gè)字節(jié)。查詢示例SELECT*FROMdoctorWHERELENGTH(Password)<6;查詢所有密碼長(zhǎng)度小于6字節(jié)的醫(yī)生的所有信息注意事項(xiàng)UTF-8編碼下,中文字符通常占3個(gè)字節(jié)。如果需要按字符數(shù)判斷,應(yīng)使用CHAR_LENGTH()函數(shù)。STRINGPROCESSING字符串處理函數(shù)LOWER/UPPERLOWER將字符串轉(zhuǎn)換為小寫,UPPER轉(zhuǎn)換為大寫。SELECTLOWER('Hello');結(jié)果helloSELECTUPPER('Hello');結(jié)果HELLOLEFT/RIGHT從左側(cè)或右側(cè)截取字符串指定長(zhǎng)度。SELECTLEFT('abcdef',3);結(jié)果abcSELECTRIGHT('abcdef',3);結(jié)果defTRIM刪除字符串左右兩側(cè)的空格。UPDATEdoctorSETDoctorName=TRIM(DoctorName);將DoctorName的值去除左右兩側(cè)空格后重新保存REPLACE字符串替換函數(shù)。SELECTREPLACE('abcabc','a','x');結(jié)果:xbcxbcSUBSTRING截取字符串,從指定位置開始指定長(zhǎng)度。SELECTSUBSTRING('abcdef',2,3);結(jié)果:bcd(從第2個(gè)開始取3個(gè)字符)REVERSE字符串反轉(zhuǎn)(逆序)函數(shù)。SELECTREVERSE('abc');結(jié)果cbaADVANCEDSTRINGFUNCTIONS字符串截取與替換SUBSTRING函數(shù)截取字符串SUBSTRING函數(shù)用于截取字符串,

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論