- PHP從入門到精通(微視頻精編版)
- 明日科技
- 8486字
- 2020-11-23 14:41:17
第8章 MySQL數(shù)據(jù)庫基礎(chǔ)
(視頻講解:1小時44分鐘)
只有與數(shù)據(jù)庫相結(jié)合,才能充分發(fā)揮動態(tài)網(wǎng)頁編程語言的魅力,因為網(wǎng)絡(luò)上的眾多應(yīng)用都是基于數(shù)據(jù)庫的。PHP支持多種數(shù)據(jù)庫,尤其與MySQL被稱為黃金搭檔。MySQL命令行通過SQL語句對數(shù)據(jù)庫進行操作,本章將詳細介紹MySQL數(shù)據(jù)庫的基礎(chǔ)知識,通過本章的學習,讀者不但可以輕松掌握操作MySQL數(shù)據(jù)庫、數(shù)據(jù)表的方法,還可以對MySQL數(shù)據(jù)庫進行查詢等操作。
學習摘要:
MySQL概述
啟動和關(guān)閉MySQL服務(wù)器
操作MySQL數(shù)據(jù)庫
MySQL數(shù)據(jù)類型
操作數(shù)據(jù)表
操作數(shù)據(jù)表記錄
MySQL圖形化管理工具
8.1 MySQL概述

視頻講解
MySQL是目前最為流行的開源數(shù)據(jù)庫,是完全網(wǎng)絡(luò)化的跨平臺關(guān)系型數(shù)據(jù)庫系統(tǒng),它是由瑞典的MySQL AB公司開發(fā),由MySQL的初始開發(fā)人員David Axmark和Michael Monty Widenius于1995年建立。它的象征符號是一只名為Sakila的海豚,如圖8.1所示,代表著MySQL數(shù)據(jù)庫和團隊的速度、能力、精確和優(yōu)秀本質(zhì)。

圖8.1 MySQL圖標
除了具有許多其他數(shù)據(jù)庫所不具備的功能和選擇之外,MySQL數(shù)據(jù)庫還是一種完全免費的產(chǎn)品,用戶可以直接從網(wǎng)上下載使用,而不必支付任何費用。
下面介紹MySQL的特點。
功能強大:MySQL中提供了多種數(shù)據(jù)庫存儲引擎,各個引擎各有所長,適用于不同的應(yīng)用場合,用戶可以選擇最合適的引擎以得到最高的性能,甚至可以處理每天訪問量數(shù)億的高強度Web搜索站點。MySQL支持事務(wù)、視圖、存儲過程和觸發(fā)器等。
支持跨平臺:MySQL支持至少20種以上的開發(fā)平臺,包括Linux、Windows、FreeBSD、IBM AIX等。這使得在任何平臺下編寫的程序都可以進行移植,而不需要對程序做任何修改。
運行速度快:高速是MySQL的顯著特性。在MySQL中,使用了極快的B樹磁盤表(MyISAM)和索引壓縮;通過使用優(yōu)化的單掃描多連接,能夠極快地實現(xiàn)連接;SQL函數(shù)使用高度優(yōu)化的類庫實現(xiàn),運行速度極快。
成本低:MySQL數(shù)據(jù)庫是一種完全免費的產(chǎn)品,用戶可以直接從網(wǎng)上下載。
支持各種開發(fā)語言:MySQL為各種流行的程序設(shè)計語言提供支持,為它們提供了很多的API函數(shù),包括PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++和Perl等。
數(shù)據(jù)庫存儲容量大:MySQL數(shù)據(jù)庫的最大有效表尺寸通常是由操作系統(tǒng)對文件大小的限制決定的,而不是由MySQL內(nèi)部限制決定的。InnoDB存儲引擎將InnoDB表保存在一個表空間內(nèi),該表空間可由數(shù)個文件創(chuàng)建,表空間的最大容量為64TB,可以輕松處理擁有上千萬條記錄的大型數(shù)據(jù)庫。
8.2 啟動和關(guān)閉MySQL服務(wù)器

視頻講解
8.2.1 啟動MySQL服務(wù)器
由于我們使用的phpStudy集成開發(fā)環(huán)境中已經(jīng)內(nèi)置了MySQL,所以,讀者無須再重復安裝MySQL。當啟動phpStudy時,MySQL也隨著默認啟動,如圖8.2所示。

圖8.2 默認啟動MySQL
8.2.2 連接和斷開MySQL服務(wù)器
1.連接MySQL服務(wù)器
MySQL服務(wù)器啟動后,下面連接服務(wù)器。MySQL通過提供MySQL console命令窗口客戶端實現(xiàn)了與MySQL服務(wù)器之間的交互。操作步驟如下:
選擇“開始”→“運行”命令,在彈出的“運行”窗口中輸入cmd命令,如圖8.3所示。按Enter鍵后進入CMD命令行窗口,如圖8.4所示。

圖8.3 Windows 7系統(tǒng)下運行窗口

圖8.4 CMD命令行窗口
要使用MySQL命令,首先需要切換到MySQL命令行目錄,即D:\phpStudy\MySQL\bin,操作方法如圖8.5所示。

圖8.5 進入MySQL命令行目錄
在命令提示符下,輸入如下命令連接MySQL:

上述命令中,-uroot表示用戶名為root,-proot表示密碼為root。phpStudy中MySQL的默認賬號和密碼都是root。
注意
-uroot中字母之間沒有空格,-proot也沒有空格。
輸入完命令語句后,按Enter鍵即可連接MySQL服務(wù)器,如圖8.6所示。

圖8.6 成功連接MySQL服務(wù)器
2.斷開MySQL連接
連接到MySQL服務(wù)器后,可以通過在MySQL提示符下輸入exit或者quit命令并且按Enter鍵來斷開MySQL連接,如圖8.7所示。

圖8.7 斷開MySQL連接
3.設(shè)置系統(tǒng)的環(huán)境變量
每次使用MySQL命令,都要切換到MySQL命令行目錄,即D:\phpStudy\MySQL\bin,如果在其他目錄下執(zhí)行MySQL命令,則會提示“‘mysql’不是內(nèi)部或外部命令”錯誤信息,如圖8.8所示。

圖8.8 “‘mysql’不是內(nèi)部或外部命令”的錯誤提示
通過設(shè)置環(huán)境變量,可以實現(xiàn)在任何目錄下都能使用MySQL命令的功能。下面介紹設(shè)置環(huán)境變量的方法。其步驟如下。
(1)右擊“計算機”圖標,在彈出的快捷菜單中選擇“屬性”命令,在彈出的對話框中選擇“高級系統(tǒng)設(shè)置”選項,如圖8.9所示。在彈出的“系統(tǒng)屬性”對話框中單擊“環(huán)境變量”按鈕,如圖8.10所示。

圖8.9 選擇“高級系統(tǒng)設(shè)置”選項

圖8.10 “系統(tǒng)屬性”對話框
(2)在彈出的“環(huán)境變量”對話框中選擇PATH選項,如圖8.11所示。單擊“編輯”按鈕,將彈出“編輯用戶變量”對話框,如圖8.12所示。

圖8.11 “環(huán)境變量”對話框

圖8.12 “編輯用戶變量”對話框
在“編輯用戶變量”對話框中,將MySQL服務(wù)器的bin文件夾路徑(D:\phpStudy\MySQL\bin)添加到變量值文本框中,注意要使用“;”與其他變量值進行分隔,最后,單擊“確定”按鈕。環(huán)境變量設(shè)置完成后,即可在任何目錄使用MySQL命令。例如,在“運行”窗口輸入cmd命令進入的初始目錄中使用MySQL命令,如圖8.13所示。

圖8.13 任意目錄使用MySQL命令
8.3 操作MySQL數(shù)據(jù)庫

視頻講解
針對MySQL數(shù)據(jù)庫的操作可以分為創(chuàng)建、選擇、查看和刪除4種,下面介紹這4種操作。
8.3.1 創(chuàng)建數(shù)據(jù)庫
在MySQL中,應(yīng)用create database語句創(chuàng)建數(shù)據(jù)庫。其語法格式如下:

在創(chuàng)建數(shù)據(jù)庫時,數(shù)據(jù)庫的命名要遵循如下規(guī)則:
不能與其他數(shù)據(jù)庫重名。
名稱可以由任意字母、阿拉伯數(shù)字、下畫線(_)或者“$”組成,可以使用上述的任意字符開頭,但不能使用單獨的數(shù)字,否則會造成它與數(shù)值相混淆。
名稱最長可為64個字符組成(還包括表、列和索引的命名),而別名最多可長達256個字符。
不能使用MySQL關(guān)鍵字作為數(shù)據(jù)庫、表名。
默認情況下,Windows下數(shù)據(jù)庫名、表名的字母大小寫是不敏感的,而在Linux下數(shù)據(jù)庫名、表名的字母大小寫是敏感的。為了便于數(shù)據(jù)庫在平臺間進行移植,建議讀者采用小寫字母來定義數(shù)據(jù)庫名和表名。
下面通過create database語句創(chuàng)建一個名稱為db_users的數(shù)據(jù)庫。在創(chuàng)建數(shù)據(jù)庫時,首先連接MySQL服務(wù)器,然后編寫create database db_users;SQL語句,數(shù)據(jù)庫創(chuàng)建成功。運行結(jié)果如圖8.14所示。

圖8.14 創(chuàng)建數(shù)據(jù)庫
創(chuàng)建db_users數(shù)據(jù)庫后,MySQL管理系統(tǒng)會自動在D:\phpStudy\MySQL\data目錄下創(chuàng)建db_users數(shù)據(jù)庫文件夾及相關(guān)文件,實現(xiàn)對該數(shù)據(jù)庫的文件管理。
說明
D:\phpStudy\MySQL\data目錄是MySQL配置文件my.ini中設(shè)置的數(shù)據(jù)庫文件的存儲目錄。用戶可以通過修改配置選項datadir的值來對數(shù)據(jù)庫文件的存儲目錄進行重新設(shè)置。
8.3.2 選擇數(shù)據(jù)庫
use語句用于選擇一個數(shù)據(jù)庫,使其成為當前默認數(shù)據(jù)庫。其語法格式如下:

例如,選擇名稱為db_users的數(shù)據(jù)庫,操作命令如圖8.15所示。

圖8.15 選擇數(shù)據(jù)庫
選擇了db_users數(shù)據(jù)庫之后,才可以操作該數(shù)據(jù)庫中的所有對象。
8.3.3 查看數(shù)據(jù)庫
數(shù)據(jù)庫創(chuàng)建完成后,可以使用show databases命令查看MySQL數(shù)據(jù)庫中所有已經(jīng)存在的數(shù)據(jù)庫。其語法格式如下:

例如,使用show databases命令顯示本地MySQL數(shù)據(jù)庫中所有存在的數(shù)據(jù)庫名,如圖8.16所示。

圖8.16 顯示所有數(shù)據(jù)庫名
注意
show databases是復數(shù)形式,并且所有命令都以英文分號“;”結(jié)尾。
8.3.4 刪除數(shù)據(jù)庫
刪除數(shù)據(jù)庫使用的是drop database語句,其語法格式如下:

例如,在MySQL命令窗口中使用drop database db_users;SQL語句即可刪除db_users數(shù)據(jù)庫,如圖8.17所示。刪除數(shù)據(jù)庫后,MySQL管理系統(tǒng)會自動刪除D:\phpStudy\MySQL\data目錄下的db_ users目錄及相關(guān)文件。

圖8.17 刪除數(shù)據(jù)庫
注意
對于刪除數(shù)據(jù)庫的操作,應(yīng)該謹慎使用,一旦執(zhí)行這項操作,數(shù)據(jù)庫的所有結(jié)構(gòu)和數(shù)據(jù)都會被刪除,沒有恢復的可能,除非數(shù)據(jù)庫有備份。
8.4 MySQL數(shù)據(jù)類型

視頻講解
在MySQL數(shù)據(jù)庫中,每一條數(shù)據(jù)都有其數(shù)據(jù)類型。MySQL支持的數(shù)據(jù)類型主要分成3類:數(shù)字類型、字符串(字符)類型、日期和時間類型。
8.4.1 數(shù)字類型
MySQL支持的數(shù)字類型包括準確數(shù)字的數(shù)據(jù)類型(NUMERIC、DECIMAL、INTEGER和SMALLINT),還包括近似數(shù)字的數(shù)據(jù)類型(FLOAT、REAL和DOUBLE PRECISION)。其中,關(guān)鍵字INT是INTEGER的簡寫,關(guān)鍵字DEC是DECIMAL的簡寫。
一般來說,數(shù)字類型可以分成整型和浮點型兩類,詳細內(nèi)容如表8.1和表8.2所示。
表8.1 整型數(shù)據(jù)類型

表8.2 浮點型數(shù)據(jù)類型

說明
在創(chuàng)建表時,使用哪種數(shù)字類型,應(yīng)遵循以下原則。
(1)選擇最小的可用類型,如果值永遠不超過127,則使用TINYINT要比使用INT好。
(2)對于完全都是數(shù)字的,可以選擇整數(shù)類型。
(3)浮點類型用于可能具有小數(shù)部分的數(shù)。例如,貨物單價、網(wǎng)上購物交付金額等。
8.4.2 字符串類型
字符串類型可以分為3類:普通的文本字符串類型(CHAR和VARCHAR)、可變類型(TEXT和BLOB)和特殊類型(ENUM和SET)。它們之間都有一定的區(qū)別,取值的范圍不同,應(yīng)用的地方也不同。
(1)普通的文本字符串類型,即CHAR和VARCHAR類型,CHAR列的長度在創(chuàng)建表時指定,取值在1~255;VARCHAR列的值是變長的字符串,取值和CHAR一樣。普通的文本字符串類型如表8.3所示。
表8.3 普通的文本字符串類型

(2)TEXT和BLOB類型。它們的大小可以改變,TEXT類型適合存儲長文本,而BLOB類型適合存儲二進制數(shù)據(jù),支持任何數(shù)據(jù),如文本、聲音和圖像等。TEXT和BLOB類型如表8.4所示。
表8.4 TEXT和BLOB類型

(3)特殊類型ENUM和SET。特殊類型ENUM和SET的介紹如表8.5所示。
表8.5 ENUM和SET類型

說明
在創(chuàng)建表時,使用字符串類型時應(yīng)遵循以下原則。
(1)從速度方面考慮,要選擇固定的列,可以使用CHAR類型。
(2)要節(jié)省空間,使用動態(tài)的列,可以使用VARCHAR類型。
(3)要將列中的內(nèi)容限制在一種選擇,可以使用ENUM類型。
(4)允許在一個列中有多于一個的條目,可以使用SET類型。
(5)如果要搜索的內(nèi)容不區(qū)分大小寫,可以使用TEXT類型。
(6)如果要搜索的內(nèi)容區(qū)分大小寫,可以使用BLOB類型。
8.4.3 日期和時間類型
日期和時間類型包括DATE、TIME、DATETIME、TIMESTAMP和YEAR。其中的每種類型都有其取值的范圍,如賦予它一個不合法的值,將會被“0”代替。日期和時間數(shù)據(jù)類型如表8.6所示。
表8.6 日期和時間數(shù)據(jù)類型

在MySQL中,日期的順序是按照標準的ANSI SQL格式進行輸入的。
8.5 操作數(shù)據(jù)表

視頻講解
數(shù)據(jù)庫創(chuàng)建完成后,即可在命令提示符下對數(shù)據(jù)庫中的數(shù)據(jù)表進行操作,如創(chuàng)建數(shù)據(jù)表、更改數(shù)據(jù)表結(jié)構(gòu)以及刪除數(shù)據(jù)表等。
8.5.1 創(chuàng)建數(shù)據(jù)表
MySQL數(shù)據(jù)庫中,可以使用create table命令創(chuàng)建數(shù)據(jù)表。其語法格式如下:

create table語句的參數(shù)說明如表8.7所示。
表8.7 create table語句的參數(shù)說明

下面介紹列屬性create_definition的使用方法,每一列具體的定義格式如下:

屬性create_definition的參數(shù)說明如表8.8所示。
表8.8 屬性create_definition的參數(shù)說明

在實際應(yīng)用中,使用create table命令創(chuàng)建數(shù)據(jù)表時,只需指定最基本的屬性即可,語法格式如下:

例如,在命令提示符下應(yīng)用create database db_users創(chuàng)建db_users數(shù)據(jù)庫,然后使用create table命令,在數(shù)據(jù)庫db_users中創(chuàng)建一個名為tb_users的數(shù)據(jù)表,表中包括id、user name、password和createtime等字段,實現(xiàn)過程如圖8.18所示。

圖8.18 創(chuàng)建MySQL數(shù)據(jù)表
說明
按Enter鍵即可換行,結(jié)尾分號“;”表示該行語句結(jié)束。
8.5.2 查看表結(jié)構(gòu)
成功創(chuàng)建數(shù)據(jù)表后,可以使用show columns命令或describe命令查看指定數(shù)據(jù)表的表結(jié)構(gòu)。下面分別對這兩個語句進行介紹。
1.show columns命令
show columns命令的語法格式如下:

或?qū)懗桑?/p>

例如,應(yīng)用show columns命令查看數(shù)據(jù)表tb_users表結(jié)構(gòu),如圖8.19所示。

圖8.19 查看tb_users表結(jié)構(gòu)
2.describe命令
describe命令的語法格式如下:

其中,describe可以簡寫為desc。在查看表結(jié)構(gòu)時,也可以只列出某一列的信息,語法格式如下:

例如,應(yīng)用describe命令的簡寫形式查看數(shù)據(jù)表tb_users的某一列信息,如圖8.20所示。

圖8.20 查看tb_users表createtime列的信息
8.5.3 修改表結(jié)構(gòu)
修改表結(jié)構(gòu)采用alter table命令。修改表結(jié)構(gòu)指增加或者刪除字段、修改字段名稱或者字段類型、設(shè)置取消主鍵外鍵、設(shè)置取消索引以及修改表的注釋等。其語法格式如下:

需要注意的是,當指定IGNORE時,如果出現(xiàn)重復關(guān)鍵的行,則只執(zhí)行一行,其他重復的行被刪除。其中,alter_specification子句用于定義要修改的內(nèi)容,語法如下:

alter table語句允許指定多個動作,動作間使用逗號分隔,每個動作表示對表的一個修改。
例如,向tb_users表中添加一個新的字段address,類型為varchar(60),并且不為空值(not null),將字段username的類型由varchar(30)改為varchar(50),然后再用show columns命令查看修改后的表結(jié)構(gòu),如圖8.21所示。

圖8.21 修改tb_users表結(jié)構(gòu)
8.5.4 重命名數(shù)據(jù)表
重命名數(shù)據(jù)表采用rename table命令,其語法格式如下:

例如,對數(shù)據(jù)表tb_users進行重命名,更名后的數(shù)據(jù)表為tb_member,只需要在MySQL命令窗口中使用rename table tb_users to tb_member;語句即可。此時使用show columns查看tb_users表將輸出錯誤信息,提示“tb_users表不存在”。因為tb_users表已經(jīng)變成tb_member表,可以使用show columns查看tb_member表,運行結(jié)果如圖8.22所示。

圖8.22 將tb_users表名更改為tb_member數(shù)據(jù)表
說明
該語句可以同時對多個數(shù)據(jù)表進行重命名,多個表之間以逗號“,”分隔。
8.5.5 刪除數(shù)據(jù)表
刪除數(shù)據(jù)表的操作很簡單,與刪除數(shù)據(jù)庫的操作類似,使用drop table命令即可實現(xiàn)。其語法格式如下:

例如,在MySQL命令窗口中使用drop table tb_member;SQL語句即可刪除tb_member數(shù)據(jù)表。刪除數(shù)據(jù)表后,MySQL管理系統(tǒng)會自動刪除D:\phpStudy\MySQL\data\db_users目錄下的表文件。
注意
刪除數(shù)據(jù)表的操作應(yīng)該謹慎使用。一旦刪除了數(shù)據(jù)表,那么表中的數(shù)據(jù)將會全部清除,如果沒有備份則無法恢復。
在刪除數(shù)據(jù)表的過程中,如果刪除一個不存在的表將會產(chǎn)生錯誤,這時在刪除語句中加入if exists關(guān)鍵字就可以避免出錯。其語法格式如下:

注意
在對數(shù)據(jù)表進行操作之前,首先必須選擇數(shù)據(jù)庫,否則是無法對數(shù)據(jù)表進行操作的。
例如,先使用drop table語句刪除一個tb_users表,查看提示信息,然后使用drop table if exists語句刪除tb_users表。運行結(jié)果如圖8.23所示。

圖8.23 刪除tb_users數(shù)據(jù)表
8.6 數(shù)據(jù)表記錄的操作

視頻講解
數(shù)據(jù)庫中包含數(shù)據(jù)表,而數(shù)據(jù)表中包含數(shù)據(jù)。在MySQL與PHP的結(jié)合應(yīng)用中,真正被操作的是數(shù)據(jù)表中的數(shù)據(jù),因此如何更好地操作和使用這些數(shù)據(jù)才是使用MySQL數(shù)據(jù)庫的根本。
向數(shù)據(jù)表中插入、修改和刪除記錄可以在MySQL命令行中使用SQL語句完成。下面介紹如何在MySQL命令行中執(zhí)行基本的SQL語句。
8.6.1 數(shù)據(jù)表記錄的添加
建立一個空的數(shù)據(jù)庫和數(shù)據(jù)表時,首先要想到的就是如何向數(shù)據(jù)表中添加數(shù)據(jù)。這項操作可以通過insert命令來實現(xiàn)。其語法格式如下:

在MySQL中,一次可以同時插入多行記錄,各行記錄的值清單在values關(guān)鍵字后以逗號“,”分隔,而標準的SQL語句一次只能插入一行。
說明
值列表中的值應(yīng)與字段列表中字段的個數(shù)和順序相對應(yīng),值列表中值的數(shù)據(jù)類型必須與相應(yīng)字段的數(shù)據(jù)類型保持一致。
例如,向用戶信息表tb_member中插入一條數(shù)據(jù)信息,如圖8.24所示。

圖8.24 向tb_member表中插入新記錄
當向數(shù)據(jù)表中的所有列添加數(shù)據(jù)時,insert語句中的字段列表可以省略,例如:

8.6.2 數(shù)據(jù)表記錄的查詢
數(shù)據(jù)表中插入數(shù)據(jù)后,可以使用select命令來查詢數(shù)據(jù)表中的數(shù)據(jù)。其語法格式如下:

其中,selection_list是要查找的列名,如果要查詢多個列,可以用“,”隔開;如果查詢所有列,可以用“*”代替。where子句是可選的,如果給出該子句,將查詢出指定記錄。
例如,查詢tb_member表中所有數(shù)據(jù)。運行結(jié)果如圖8.25所示。

圖8.25 select查找數(shù)據(jù)
8.6.3 數(shù)據(jù)表記錄的修改
要執(zhí)行數(shù)據(jù)修改的操作可以使用update命令,其語法格式如下:

其中,set子句指出要修改的列及其給定的值;where子句是可選的,如果給出該子句將指定記錄中哪行應(yīng)該被更新,否則,所有的記錄行都將被更新。
例如,將用戶信息表tb_member中用戶名為mr的管理員密碼mrsoft修改為mingrisoft,SQL語句如下:

運行結(jié)果如圖8.26所示。

圖8.26 更改數(shù)據(jù)表記錄
8.6.4 數(shù)據(jù)表記錄的刪除
在數(shù)據(jù)庫中有些數(shù)據(jù)已經(jīng)失去意義或者是錯誤的,這時就需要將它們刪除,此時可以使用delete命令。其語法格式如下:

注意
該語句在執(zhí)行過程中,如果沒有指定where條件,將刪除所有的記錄;如果指定了where條件,將按照指定的條件進行刪除。
使用delete命令刪除整個表的效率并不高,還可以使用truncate命令,利用它可以快速刪除表中所有的內(nèi)容。
例如,刪除用戶信息表tb_users中用戶名為mr的記錄信息,SQL語句如下:

刪除后,使用select命令查看結(jié)果。運行結(jié)果如圖8.27所示。

圖8.27 delete命令刪除記錄
8.7 數(shù)據(jù)表記錄的查詢操作

視頻講解
對于數(shù)據(jù)表的“增刪改查”,最常用的就是查詢操作。在8.6.2節(jié)中,我們只是介紹了最基礎(chǔ)的查詢操作,實際應(yīng)用中查詢的條件要復雜得多。再來看一下比較復雜的select語法:

下面對它的參數(shù)進行詳細講解。
1.selection_list
設(shè)置查詢內(nèi)容。如果要查詢表中所有列,可以將其設(shè)置為“*”;如果要查詢表中某一列或多列,則直接輸入列名,并以“,”為分隔符。例如,查詢tb_mrbook數(shù)據(jù)表中所有列和查詢id、bookname列的代碼如下:

2.table_list
指定查詢的數(shù)據(jù)表。既可以從一個數(shù)據(jù)表中查詢,也可以從多個數(shù)據(jù)表中進行查詢,多個數(shù)據(jù)表之間用“,”進行分隔,并且通過where子句使用連接運算來確定表之間的聯(lián)系。
例如,從tb_mrbook和tb_bookinfo數(shù)據(jù)表中查詢“bookname='PHP自學視頻教程'”的id編號、書名、作者和價格,其代碼如下:

在上面的SQL語句中,因為兩個表都有id字段和bookname字段,為了告訴服務(wù)器要顯示的是哪個表中的字段信息,要加上前綴。語法格式如下:

tb_mrbook.bookname=tb_bookinfo.bookname將表tb_mrbook和tb_bookinfo連接起來,叫作等同連接;如果不使用tb_mrbook.bookname=tb_bookinfo.bookname,那么產(chǎn)生的結(jié)果將是兩個表的笛卡兒積,叫作全連接。
多學兩招
笛卡兒積是指在數(shù)學中,兩個集合X和Y的笛卡兒積(Cartesian product),又稱直積,表示為X×Y,第一個對象是X的成員,而第二個對象是Y的所有可能有序?qū)Φ钠渲幸粋€成員。
3.where條件語句
在使用查詢語句時,如要從很多的記錄中查詢出想要的記錄,就需要一個查詢的條件。只有設(shè)定了查詢的條件,查詢才有實際的意義。設(shè)定查詢條件應(yīng)用的是where子句。
where子句的功能非常強大,通過它可以實現(xiàn)很多復雜的條件查詢。在使用where子句時,需要使用一些比較運算符,常用的比較運算符如表8.9所示。
表8.9 常用的where子句比較運算符

表8.9中列舉的是where子句常用的比較運算符,示例中的id是記錄的編號,name是表中的用戶名。
例如,應(yīng)用where子句,查詢tb_mrbook表,條件是type(類別)為PHP的所有圖書,代碼如下:

4.distinct在結(jié)果中去除重復行
使用distinct關(guān)鍵字,可以去除結(jié)果中重復的行。
例如,查詢tb_mrbook表,并在結(jié)果中去掉類型字段type中的重復數(shù)據(jù),代碼如下:

5.order by對結(jié)果排序
使用order by可以對查詢的結(jié)果進行升序和降序(desc)排列,在默認情況下,order by按升序輸出結(jié)果。如果要按降序排列可以使用desc來實現(xiàn)。
對含有NULL值的列進行排序時,如果是按升序排列,NULL值將出現(xiàn)在最前面,如果是按降序排列,NULL值將出現(xiàn)在最后。例如,查詢tb_mrbook表中的所有信息,按照id進行降序排列,并且只顯示5條記錄。代碼如下:

6.like模糊查詢
like屬于較常用的比較運算符,通過它可以實現(xiàn)模糊查詢。它有兩種通配符:“%”和“_”。“%”可以匹配一個或多個字符,而“_”只匹配一個字符。例如,查找所有書名(bookname字段)包含PHP的圖書,代碼如下:

說明
無論是一個英文字符還是中文字符都算作一個字符,在這一點上英文字母和中文沒有什么區(qū)別。
7.concat聯(lián)合多列
使用concat函數(shù)可以聯(lián)合多個字段,構(gòu)成一個總的字符串。例如,把tb_mrbook表中的書名(bookname)和價格(price)合并到一起,構(gòu)成一個新的字符串。代碼如下:

其中,合并后的字段名為concat()函數(shù)形成的表達式bookname:price,看上去十分復雜,通過as關(guān)鍵字給合并字段取一個別名,這樣看上去就清晰了。如《PHP項目開發(fā)實戰(zhàn)入門》這本書定價為69.80元,concat()查詢結(jié)果中的info字段值則是“PHP項目開發(fā)實戰(zhàn)入門:69.80”。
8.limit限定結(jié)果行數(shù)
limit子句可以對查詢結(jié)果的記錄條數(shù)進行限定,控制它輸出的行數(shù)。例如,查詢tb_mrbook表,按照圖書價格升序排列,顯示10條記錄,代碼如下:

使用limit還可以從查詢結(jié)果的中間部分取值。首先要定義兩個參數(shù),參數(shù)1是開始讀取的第1條記錄的編號(在查詢結(jié)果中,第1個結(jié)果的記錄編號是0,而不是1);參數(shù)2是要查詢記錄的個數(shù)。
例如,查詢tb_mrbook表,從第3條記錄開始,查詢6條記錄,代碼如下:

9.使用函數(shù)和表達式
在MySQL中,還可以使用表達式來計算各列的值,作為輸出結(jié)果。表達式還可以包含一些函數(shù)。
例如,計算tb_mrbook表中各類圖書的總價格,代碼如下:

在對MySQL數(shù)據(jù)庫進行操作時,有時需要對數(shù)據(jù)庫中的記錄進行統(tǒng)計,如求平均值、最小值、最大值等,這時可以使用MySQL中的統(tǒng)計函數(shù),其常用的統(tǒng)計函數(shù)如表8.10所示。
表8.10 MySQL中常用的統(tǒng)計函數(shù)

除了使用函數(shù)之外,還可以使用算術(shù)運算符、字符串運算符,以及邏輯運算符來構(gòu)成表達式。例如,可以計算圖書打九折之后的價格,代碼如下:

10.group by對結(jié)果分組
通過group by子句可以將數(shù)據(jù)劃分到不同的組中,實現(xiàn)對記錄進行分組查詢。在查詢時,所查詢的列必須包含在分組的列中,目的是使查詢到的數(shù)據(jù)沒有矛盾。在與avg()函數(shù)或sum()函數(shù)一起使用時,group by子句能發(fā)揮最大作用。例如,查詢tb_mrbook表,按照type進行分組,求每類圖書的平均價格,代碼如下:

11.使用having子句設(shè)定第二個查詢條件
having子句通常和group by子句一起使用。在對數(shù)據(jù)結(jié)果進行分組查詢和統(tǒng)計之后,還可以使用having子句來對查詢的結(jié)果進行進一步篩選。having子句和where子句都用于指定查詢條件,不同的是where子句在分組查詢之前應(yīng)用,而having子句在分組查詢之后應(yīng)用,而且having子句中還可以包含統(tǒng)計函數(shù)。例如,計算tb_mrbook表中各類圖書的平均價格,并篩選出圖書的平均價格大于60元的記錄,代碼如下:

8.8 MySQL圖形化管理工具

視頻講解
在命令提示符下操作MySQL數(shù)據(jù)庫的方式對PHP初學者并不友好,而且需要有專業(yè)的SQL語言知識,所以各種MySQL圖形化管理工具應(yīng)運而生。下面只簡要介紹phpMyAdmin、Navicat for MySQL這兩種工具的使用。
8.8.1 phpMyAdmin簡介
phpMyAdmin是眾多MySQL圖形化管理工具中使用最廣泛的一種,是一款使用PHP開發(fā)的B/S模式的MySQL客戶端軟件,該工具是基于Web跨平臺的管理程序,并且支持簡體中文。通過該管理工具可以對MySQL進行各種操作,如創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表和生成MySQL數(shù)據(jù)庫腳本文件等。
phpStudy集成開發(fā)環(huán)境中已經(jīng)安裝了phpMyAdmin圖形化管理工具,所以用戶無須再下載,可以按圖8.28所示方式打開。

圖8.28 打開phpMyAdmin
打開后,輸入數(shù)據(jù)庫的用戶名root,密碼root,如圖8.29所示。

圖8.29 phpMyAdmin連接MySQL
單擊“執(zhí)行”按鈕,進入phpMyAdmin管理平臺,如圖8.30所示。

圖8.30 phpMyAdmin管理平臺首頁
說明
phpMyAdmin的更多操作請查閱相關(guān)資料。
8.8.2 Navicat for MySQL簡介
Navicat for MySQL是一個桌面版的MySQL數(shù)據(jù)庫管理和開發(fā)工具。和微軟SQLServer的管理器很像,易學易用。Navicat使用圖形化的用戶界面,可以讓用戶使用和管理更為輕松。官方網(wǎng)址是https://www.navicat.com.cn。
首先下載、安裝Navicat for MySQL,然后按照步驟新建MySQL連接,如圖8.31所示。

圖8.31 新建MySQL連接
彈出“連接屬性”對話框后,輸入連接信息,如圖8.32所示,其中密碼為root。

圖8.32 輸入連接信息
單擊“確定”按鈕,創(chuàng)建完成。此時,雙擊localhost,即進入localhost數(shù)據(jù)庫。
說明
Navicat for MySQL的更多操作請查閱相關(guān)資料。
8.9 小結(jié)
本章主要介紹MySQL數(shù)據(jù)庫的基本操作,包括創(chuàng)建、查看、選擇、刪除數(shù)據(jù)庫;創(chuàng)建、修改、更名、刪除數(shù)據(jù)表;插入、瀏覽、修改、刪除記錄,這些是程序開發(fā)人員必須掌握的內(nèi)容。如果用戶不習慣在命令提示符下管理數(shù)據(jù)庫,可以在可視化的圖形工具中輕松操作和管理數(shù)據(jù)庫。另外,本章還介紹了啟動、連接和斷開MySQL服務(wù)器的方法,要求讀者熟練掌握。
- Instant Testing with CasperJS
- Programming ArcGIS 10.1 with Python Cookbook
- 精通軟件性能測試與LoadRunner實戰(zhàn)(第2版)
- ASP.NET動態(tài)網(wǎng)頁設(shè)計教程(第三版)
- 新編Premiere Pro CC從入門到精通
- C語言從入門到精通(第4版)
- INSTANT Mercurial SCM Essentials How-to
- Python算法指南:程序員經(jīng)典算法分析與實現(xiàn)
- Python Data Structures and Algorithms
- Mobile Device Exploitation Cookbook
- 微信小程序開發(fā)與實戰(zhàn)(微課版)
- SQL Server 2008 R2數(shù)據(jù)庫技術(shù)及應(yīng)用(第3版)
- INSTANT Apache ServiceMix How-to
- Getting Started with Web Components
- Wearable:Tech Projects with the Raspberry Pi Zero