一、MySQL簡(jiǎn)介
MySQL是目前最流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng)之一,由瑞典MySQL AB公司開發(fā),目前屬于Oracle 旗下產(chǎn)品。在Web應(yīng)用方面,MySQL是最好的關(guān)系數(shù)據(jù)庫管理系統(tǒng)支撐軟件之一。MySQL將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),表之間通過外鍵建立關(guān)聯(lián),這樣就增加了數(shù)據(jù)存取的速度并提高了數(shù)據(jù)操作的靈活性。MySQL使用最常用的標(biāo)準(zhǔn)化SQL定義、訪問和操作數(shù)據(jù)庫。其社區(qū)版的性能卓越,搭配PHP和Apache即可組建良好的開發(fā)環(huán)境。MySQL軟件體積小、運(yùn)行速度快、總體擁有成本低,特別是開放源碼這一特點(diǎn),一般中小型Web應(yīng)用程序的開發(fā)都選擇MySQL作為支撐數(shù)據(jù)庫。
二、MySQL的體系結(jié)構(gòu)
MySQL采用的是客戶機(jī)/服務(wù)器(Client/Server)體系結(jié)構(gòu),因此,在使用MySQL存取數(shù)據(jù)時(shí),必須至少使用兩個(gè)或者兩類程序。
(1) 在數(shù)據(jù)服務(wù)器上的數(shù)據(jù)庫服務(wù)程序(對(duì)應(yīng)Server端)。數(shù)據(jù)庫服務(wù)程序監(jiān)聽從網(wǎng)絡(luò)上傳過來的客戶機(jī)請(qǐng)求并根據(jù)這些請(qǐng)求訪問數(shù)據(jù)庫,并將結(jié)果返回給客戶機(jī)以響應(yīng)它們的請(qǐng)求。
(2) 連接到數(shù)據(jù)庫服務(wù)器的客戶機(jī)程序(對(duì)應(yīng)Client端)。這些程序是用戶和服務(wù)器交互的工具,負(fù)責(zé)將用戶需求進(jìn)行加工并傳遞到服務(wù)器以及將服務(wù)器返回的信息告知用戶。
MySQL的分發(fā)包由服務(wù)器和幾個(gè)客戶機(jī)程序組成。程序員可以根據(jù)具體的需求來選擇使用客戶機(jī)。最常用的客戶機(jī)程序?yàn)閙ysql,這是一個(gè)交互式的客戶機(jī)程序,它能發(fā)布查詢并看到結(jié)果。此外,其他的客戶機(jī)程序有mysqldump和mysqlimport,分別導(dǎo)出表的內(nèi)容到某個(gè)文件或?qū)⑽募膬?nèi)容導(dǎo)入某個(gè)表;mysqladmin用來查看服務(wù)器的狀態(tài)并完成管理任務(wù),如告訴服務(wù)器關(guān)閉、重啟、刷新緩存等。如果現(xiàn)有的客戶機(jī)程序不滿足需要,MySQL還提供了一個(gè)客戶機(jī)開發(fā)庫,可以編寫自己的程序。開發(fā)人員可以直接調(diào)用開發(fā)庫中的C語言程序,如果希望使用其他語言,還有幾種其他的接口可用。
MySQL的客戶機(jī)/服務(wù)器體系結(jié)構(gòu)具有如下優(yōu)點(diǎn)。
(1) 服務(wù)器提供并發(fā)控制,使兩個(gè)用戶不能同時(shí)修改相同的記錄。所有客戶機(jī)的請(qǐng)求都通過服務(wù)器處理,服務(wù)器分類辨別誰準(zhǔn)備做什么、何時(shí)做。如果多個(gè)客戶機(jī)希望同時(shí)訪問相同的表,它們不必互相裁決和協(xié)商,只要發(fā)送自己的請(qǐng)求給服務(wù)器并讓它仔細(xì)確定完成這些請(qǐng)求的順序即可。
(2) 不必在數(shù)據(jù)庫所在的機(jī)器上注冊(cè)。MySQL可以非常出色地在互聯(lián)網(wǎng)上工作,因此用戶可以在任何位置運(yùn)行一個(gè)客戶機(jī)程序,只要此客戶機(jī)程序能夠連接到網(wǎng)絡(luò)上的服務(wù)器即可。當(dāng)然,不是任何人都可以通過網(wǎng)絡(luò)訪問你的MySQL服務(wù)器。MySQL含有一個(gè)靈活而又有高效的安全系統(tǒng),只允許有權(quán)限的人訪問數(shù)據(jù),而且可以保證用戶只能夠做允許的事情。
三、MySQL的查詢語言
MySQL使用結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)與服務(wù)器通信。MySQL系統(tǒng)使用的SQL基本上符合SQL 92的標(biāo)準(zhǔn),但其對(duì)SQL 92標(biāo)準(zhǔn)既有擴(kuò)展又有未實(shí)現(xiàn)的地方。
表、列和數(shù)據(jù)類型
表是數(shù)據(jù)在一個(gè)MySQL數(shù)據(jù)庫中的存儲(chǔ)單元。如表8-1所示,它是一張二維表,包含一組固定的列。表中的列描述該表所表示的實(shí)體的屬性,每列都有一個(gè)名字及各自的特性。列由兩部分組成:數(shù)據(jù)類型(Data Type)和長(zhǎng)度(Length)。
■ 表8-1MySQL中的表結(jié)構(gòu)
MySQL常用的數(shù)據(jù)類型有數(shù)值類型、字符串類型及日期類型等。表8-2中給出了MySQL的基本數(shù)據(jù)類型及其描述。
■ 表8-2常用的數(shù)據(jù)類型
函數(shù)
函數(shù)(Function)是存儲(chǔ)在數(shù)據(jù)庫中的代碼塊。程序員可以根據(jù)需要?jiǎng)?chuàng)建不同的函數(shù),并直接在SQL語句中調(diào)用。函數(shù)可以把計(jì)算的結(jié)果直接返回給調(diào)用的SQL。例如,MySQL提供一個(gè)SUBSTRING函數(shù)來執(zhí)行字符串上的“取子串”操作,如果創(chuàng)建一個(gè)叫作MYSUB的函數(shù)來執(zhí)行一個(gè)自定義的取子串操作,就可以在一個(gè)SQL命令中調(diào)用它。如:
select mysub("This is a test", 6, 2)
SQL語句
SQL是一種典型的非過程化程序設(shè)計(jì)語言。這種語言的特點(diǎn)是:只指定哪些數(shù)據(jù)被操縱,至于對(duì)這些數(shù)據(jù)要執(zhí)行哪些操作,以及這些操作是如何執(zhí)行的,則未被指定。非過程化程序設(shè)計(jì)語言的優(yōu)點(diǎn)在于簡(jiǎn)單易學(xué),因此SQL已經(jīng)成為關(guān)系數(shù)據(jù)庫訪問和操縱數(shù)據(jù)的標(biāo)準(zhǔn)語言。
與SQL對(duì)應(yīng)的是過程化程序設(shè)計(jì)語言,各種高級(jí)程序設(shè)計(jì)語言都屬于這一范疇。該語言的特點(diǎn)是:一條語句的執(zhí)行是與其前后的語句和控制結(jié)構(gòu)(如條件語句、循環(huán)語句等)相關(guān)的。與SQL相比,這些語言顯得比較復(fù)雜,但優(yōu)點(diǎn)是使用靈活,數(shù)據(jù)操縱能力非常強(qiáng)大。
這些過程化的程序設(shè)計(jì)語言在訪問數(shù)據(jù)庫時(shí)一般不允許按照某種特定的順序來讀取表的記錄,因?yàn)檫@樣做會(huì)降低DBMS讀取記錄的效率。而使用SQL只能按查詢條件來讀取記錄。當(dāng)考慮如何從表中取出記錄時(shí),自然會(huì)想到按記錄的位置讀取它們。例如,也可以通過循環(huán)逐個(gè)記錄地掃描,來選出特定的記錄。但在使用SQL讀取記錄時(shí),要盡量避免這種操作思路。
假如想選出所有名字是Tom的記錄,如果使用傳統(tǒng)的編程語言,可能會(huì)構(gòu)造一個(gè)循環(huán),逐個(gè)查找表中的記錄,看名字字段內(nèi)容是否匹配Tom。這種選擇記錄的方法是可行的,但是效率非常低。而用SQL時(shí),只要說“選擇所有名字域等于Tom的記錄”,SQL就會(huì)篩選出所有符合條件的記錄。SQL會(huì)確定實(shí)現(xiàn)查詢的最佳方法。
例如,從表teachers中取出id為1的數(shù)據(jù):
select * from teachers where id=1
實(shí)現(xiàn)相同的功能,如果用普通的高級(jí)語言,也許需要一個(gè)復(fù)雜的循環(huán)。
MySQL云數(shù)據(jù)庫免費(fèi)試用3個(gè)月
云數(shù)據(jù)庫 RDS MySQL是藍(lán)隊(duì)云為用戶提供的一種安全可靠、性能穩(wěn)定、靈活擴(kuò)展的企業(yè)級(jí)云數(shù)據(jù)庫服務(wù),可幫助用戶分鐘級(jí)創(chuàng)建、操作和擴(kuò)展關(guān)系型數(shù)據(jù)庫,無需擔(dān)心底層基礎(chǔ)設(shè)施的維護(hù)和管理。
藍(lán)隊(duì)云mysql云數(shù)據(jù)庫支持免費(fèi)試用,新老用戶都可以申請(qǐng)免費(fèi)試用3個(gè)月,需要的朋友可以直接領(lǐng)取使用。云數(shù)據(jù)庫、云消息隊(duì)列、云負(fù)載均衡免費(fèi)試用-藍(lán)隊(duì)云