無論是運(yùn)維、開發(fā)、測(cè)試,還是架構(gòu)師,數(shù)據(jù)庫技術(shù)是一個(gè)必備加薪神器。
而 MySQL 由于免費(fèi),而且性能強(qiáng)勁,是目前使用最廣泛的數(shù)據(jù)庫產(chǎn)品,同時(shí)也是入門門檻最低的數(shù)據(jù)庫產(chǎn)品之一。更重要的是,掌握了 MySQL,會(huì)為你以后學(xué)習(xí)其他數(shù)據(jù)庫產(chǎn)品打下堅(jiān)實(shí)的基礎(chǔ)。
今天給大家?guī)硪婚T MySQL 數(shù)據(jù)庫的進(jìn)階實(shí)戰(zhàn)教程,將重點(diǎn)講解 MySQL 的一些高級(jí)特性,以及對(duì)數(shù)據(jù)庫查詢的性能優(yōu)化。學(xué)習(xí)完本課程的同學(xué)會(huì)掌握數(shù)據(jù)庫運(yùn)維的相關(guān)知識(shí),多表聯(lián)合查詢,日志的使用等數(shù)據(jù)庫的進(jìn)階知識(shí)。
課程地址:文章最下方“了解更多”
下面來學(xué)習(xí)一下 MySQL 數(shù)據(jù)庫和數(shù)據(jù)表的基本操作:
實(shí)驗(yàn)介紹
在本節(jié)實(shí)驗(yàn)中,將會(huì)學(xué)習(xí)如何啟動(dòng)和連接服務(wù)器,如何對(duì)數(shù)據(jù)庫進(jìn)行操作,如何創(chuàng)建數(shù)據(jù)表和在表中添加數(shù)據(jù),以及如何檢索表中的數(shù)據(jù)。
知識(shí)點(diǎn)
- MySQL 的安裝與啟動(dòng)
- MySQL 的連接與斷開
- 數(shù)據(jù)庫的操作
- 數(shù)據(jù)表的操作
MySQL 介紹
MySQL 是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典 MySQLAB 公司開發(fā),目前屬于 Oracle 公司。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在 Web 應(yīng)用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。
由于配置不同,在安裝 MySQL 的過程中可能會(huì)導(dǎo)致一些問題。所以,就不講解安裝過程了。需要在本地安裝的同學(xué),可以在 在 windows 下安裝 和 在 linux 下安裝的官方頁面自行安裝。
啟動(dòng)與連接服務(wù)器
在實(shí)驗(yàn)中使用的 IDE 已經(jīng)為大家安裝好 MySQL,無需自行安裝。請(qǐng)同學(xué)們打開你們的桌面環(huán)境,點(diǎn)擊桌面上的 Xfce 終端。
如果覺得終端窗口太小,可以在視圖中設(shè)置全屏模式。在編輯中,大家可以根據(jù)自己的喜好設(shè)置字體大小,背景顏色和代碼顏色等。
首先啟動(dòng)服務(wù)器,輸入命令如下所示。
sudo service mysql start
運(yùn)行結(jié)果如下圖所示,說明服務(wù)器啟動(dòng)成功。
然后連接服務(wù)器,為了連接服務(wù)器,當(dāng)調(diào)用 mysql 時(shí),通常需要提供一個(gè) MySQL 用戶名并且很可能需要一個(gè)密碼。在這里我們使用 root 用戶連接服務(wù)器(密碼環(huán)境設(shè)置為空,無需我們輸入密碼),輸入以下命令連接服務(wù)器。
mysql -u root
顯示如下圖,說明服務(wù)器啟動(dòng)成功。
成功連接服務(wù)器后,可以在 mysql> 提示下輸入 QUIT 或 EXIT 斷開連接。
數(shù)據(jù)庫的操作
首先創(chuàng)建數(shù)據(jù)庫,其語法格式為 CREATE DATABASE <數(shù)據(jù)庫名字>。
例如,我們創(chuàng)建一個(gè)名為 mysql_test 的數(shù)據(jù)庫。
CREATE DATABASE mysql_test;
創(chuàng)建后的輸出如下,說明創(chuàng)建成功。
用 SHOW DATABASES 來查看當(dāng)前存在的所有數(shù)據(jù)庫。
SHOW DATABASES;
我們能夠在數(shù)據(jù)庫表中看到 mysql_test 這個(gè)數(shù)據(jù)庫的名字。
當(dāng)創(chuàng)建成功后,我們需要讓 USE <數(shù)據(jù)庫名字> 這個(gè)命令執(zhí)行后,才能夠使用該數(shù)據(jù)庫。
USE mysql_test
若你不想要這個(gè)數(shù)據(jù)庫了,可以使用 DROP DATABASE <數(shù)據(jù)庫名字> 來刪除指定數(shù)據(jù)庫。
例如,刪除剛才創(chuàng)建的名為 mysql_test 的數(shù)據(jù)庫。
DROP DATABASE mysql_test;
數(shù)據(jù)表的操作
數(shù)據(jù)庫就像一個(gè)衣柜,而衣柜里的小隔間就像空的數(shù)據(jù)表,在每個(gè)小隔間中放入不同類型的衣物,就像我們?cè)跀?shù)據(jù)表中添加數(shù)據(jù)。接下來我們就學(xué)習(xí)一下,如何使用數(shù)據(jù)表吧。
現(xiàn)在,我們使用 CREATE TABLE <數(shù)據(jù)表名> 在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。
創(chuàng)建數(shù)據(jù)表的語法格式如下所示。
CREATE TABLE <表名>(
<字段名1> <數(shù)據(jù)類型>(<數(shù)據(jù)長度>),
<字段名2> <數(shù)據(jù)類型>(<數(shù)據(jù)長度>),
....
<字段名n> <數(shù)據(jù)類型>(<數(shù)據(jù)長度>)
);
例如,我們創(chuàng)建一個(gè)名為 gradesystem 的數(shù)據(jù)庫,我們?cè)谠摂?shù)據(jù)庫中,創(chuàng)建名為student 的數(shù)據(jù)表,表中包括學(xué)號(hào) ID、學(xué)生姓名、性別信息。
# 創(chuàng)建名為 student 的數(shù)據(jù)表,包含 id,stu_name,gender
CREATE TABLE student(id int(10),stu_name char(20),gender char(10));
顯示如下圖所示,說明創(chuàng)建成功。
然后再創(chuàng)建一張名為 mark 的表,表中包含學(xué)生 id 、課程名字和分?jǐn)?shù),為了讓代碼看起來更加的整潔美觀,您可以分行輸入,如下所示。
# 創(chuàng)建名為 mark 的數(shù)據(jù)表
CREATE TABLE mark
(
id int(10), # 學(xué)生 id
name char(20), # 課程名
grade int(10) # 課程分?jǐn)?shù)
);
創(chuàng)建數(shù)據(jù)表后,使用 SHOW TABLES 來查看一下,我們能夠看到剛才創(chuàng)建的兩張數(shù)據(jù)表的名字。
SHOW TABLES; # 查詢所有數(shù)據(jù)表
使用 DESCRIBE <數(shù)據(jù)表名字> 來查看創(chuàng)建數(shù)據(jù)表的完整信息。
例如,我們查看一下數(shù)據(jù)表 student 的完整信息。
DESCRIBE student;
從上圖中我們可以看到剛才創(chuàng)建的三個(gè)字段名,int 和 char 是 MySQL 的兩種數(shù)據(jù)類型,MySQL 的數(shù)據(jù)類型有很多,不熟悉的同學(xué),可以看一下 MySQL 的數(shù)據(jù)類型。
在圖中 Null 全都為 YES,那是因?yàn)槲覀儧]有指定列名為非空。若我們指定列名為NOT NULL,則會(huì)顯示 NO,如下所示。
到此,我們已經(jīng)在數(shù)據(jù)庫中建立了兩張數(shù)據(jù)表。接著我們需要在表中添加數(shù)據(jù)。在表中添加數(shù)據(jù),有 LOAD DATA 和 INSERT 兩種方式。
- LOAD DATA 是一次可以添加多條數(shù)據(jù),可以把文本文件中的數(shù)據(jù)直接加載到數(shù)據(jù)表中。
- INSERT 是一次增加一條新的數(shù)據(jù)。
使用 LOAD DATA 加載數(shù)據(jù),語句格式為:
LOAD DATA INFILE '加載數(shù)據(jù)文件的路徑' INTO TABLE 表名;
使用 INSERT 語句向表中插入數(shù)據(jù),語句格式為:
INSERT INTO 表的名字(字段名1,字段名2,字段名3) VALUES(值1,值2,值3);
例如,我們用 INSERT 語句向 student 和 mark 表中分別添加數(shù)據(jù)。
在 student 表中插入了四條完整的學(xué)生信息數(shù)據(jù),如下所示。
INSERT INTO student(id,stu_name,gender) VALUES(01,'Jack','male');
INSERT INTO student(id,stu_name,gender) VALUES(02,'Candy','male');
INSERT INTO student(id,stu_name,gender) VALUES(01,'Rose','Female');
INSERT INTO student VALUES(04,'Ann','Famale');
值得注意的是,當(dāng)我們插入的數(shù)據(jù)不完整時(shí),列名對(duì)應(yīng)位置會(huì)顯示為 NULL。我們盡量不要在表格中留有空值,因?yàn)榭罩禃?huì)降低查詢的性能。我們可以使用數(shù)字 0 去代替 NULL,關(guān)于空值的處理在后面的實(shí)驗(yàn)中會(huì)講解。
插入數(shù)據(jù)后,我們使用 SELECT 語句來查看表中的完整信息。語法格式為:SELECT * FROM <數(shù)據(jù)表名>。
再向 mark 表中插入數(shù)據(jù),如下所示。
INSERT INTO mark(id,name,grade) VALUES(01,'C++',90);
INSERT INTO mark VALUES(02,'C++',80);
INSERT INTO mark VALUES(03,'JAVA',90);
INSERT INTO mark VALUES(04,'JAVA',50);
從代碼中我們可以知道,像名字這樣 CHAR 類型的數(shù)據(jù),我們需要用引號(hào)去修飾。除了 CHAR 類型,還有 VARCHAR,TEXT,DATE,TIME,ENUM等類型的數(shù)據(jù)也需要用單引號(hào)修飾。
用 SELECT 語句查看一下數(shù)據(jù)是否成功添加到數(shù)據(jù)表中。
數(shù)據(jù)表的查詢操作
檢索特定行的數(shù)據(jù)
檢索特定行的數(shù)據(jù)是通過條件限制去查詢符合設(shè)定條件的一行或者多行數(shù)據(jù)。
我們使用 SELECT * FROM <表名> WHERE <條件> 來查詢特定行的數(shù)據(jù)。
例如,我們查詢一下在 student 表中,學(xué)生姓名為 Ann 的學(xué)生信息。
SELECT * FROM student WHERE stu_name = 'Ann';
檢索特定列的數(shù)據(jù)
檢索特定列的數(shù)據(jù)就是通過指定字段名來查詢表中某些列的數(shù)據(jù)。我們可以使用SELECT <字段名> FROM <表名> 來查詢,這里可以寫入多個(gè)列名,用逗號(hào)隔開即可。
例如,我們查詢一下在 student 表中,所有學(xué)生的姓名。
SELECT stu_name FROM student;
同時(shí)檢索特定行和列的數(shù)據(jù)
同時(shí)檢索特定行和列的數(shù)據(jù)相當(dāng)于前面兩種的結(jié)合體,我們可以使用 SELECT <字段名> FROM <表名> WHERE <條件> 來同時(shí)進(jìn)行特定行和列的數(shù)據(jù)選擇。
例如,我們可以查詢一下,在 mark 表中,學(xué)生分?jǐn)?shù)小于 90 分的成績。
SELECT grade FROM mark WHERE grade < 90;
排序檢索數(shù)據(jù)
我們可以對(duì)數(shù)據(jù)進(jìn)行排序檢索,例如在檢索學(xué)生成績時(shí),我們可以對(duì)學(xué)生成績進(jìn)行排序,這樣使得查詢結(jié)果更加清晰。
使用 OREDER BY <字段名> 可實(shí)現(xiàn)對(duì)一列或者多列數(shù)據(jù)進(jìn)行排序操作。該排序默認(rèn)是升序,我們可以在其后添加關(guān)鍵字 DESC 變成降序。
例如,對(duì) mark 表中,學(xué)生的成績進(jìn)行排序。
SELECT grade FROM mark ORDER BY grade;
最后,我們可以把不想要的數(shù)據(jù)表給刪除了。可以使用 DROP TABLE <表名> 來刪除整個(gè)表,包括表中的數(shù)據(jù)和表的結(jié)構(gòu)。
例如,我們將 student 表刪除。
如果想要保留表的結(jié)構(gòu),只是清空表中的數(shù)據(jù),那么我們可以使用 TRUNCATE TABLE <表名>。
還可以使用 DELETE FROM <表名> WHERE <字段名> 來刪除指定行的數(shù)據(jù)。
實(shí)驗(yàn)總結(jié)
在本節(jié)實(shí)驗(yàn)中,我們學(xué)習(xí)了 MySQL 服務(wù)器的啟動(dòng)與連接,創(chuàng)建并使用數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)表并在表中添加數(shù)據(jù),以及查詢表中數(shù)據(jù)的一些 SELECT 語句,包括行檢索、列檢索、排序檢索等操作。
后續(xù)課程中,你還可以學(xué)到:
點(diǎn)擊了解更多,學(xué)習(xí)完整課程內(nèi)容~