MySQL 數據庫性能優化,看這篇就夠了


無論是運維、開發、測試,還是架構師,數據庫技術是一個必備加薪神器。

而 MySQL 由於免費,而且性能強勁,是目前使用最廣泛的數據庫產品,同時也是入門門檻最低的數據庫產品之一。更重要的是,掌握了 MySQL,會為你以后學習其他數據庫產品打下堅實的基礎。

今天給大家帶來一門 MySQL 數據庫的進階實戰教程,將重點講解 MySQL 的一些高級特性,以及對數據庫查詢的性能優化。學習完本課程的同學會掌握數據庫運維的相關知識,多表聯合查詢,日志的使用等數據庫的進階知識。

課程地址: MySQL 數據庫進階實戰


下面來學習一下 MySQL 數據庫和數據表的基本操作:

實驗介紹

在本節實驗中,將會學習如何啟動和連接服務器,如何對數據庫進行操作,如何創建數據表和在表中添加數據,以及如何檢索表中的數據。

知識點

  • MySQL 的安裝與啟動
  • MySQL 的連接與斷開
  • 數據庫的操作
  • 數據表的操作

MySQL 介紹

MySQL 是一個關系型數據庫管理系統,由瑞典 MySQLAB 公司開發,目前屬於 Oracle 公司。MySQL 是最流行的關系型數據庫管理系統,在 Web 應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關系數據庫管理系統)應用軟件之一。

由於配置不同,在安裝 MySQL 的過程中可能會導致一些問題。所以,就不講解安裝過程了。需要在本地安裝的同學,可以在 在 Windows 下安裝 和 在 Linux 下安裝的官方頁面自行安裝。

啟動與連接服務器

在實驗中使用的 IDE 已經為大家安裝好 MySQL,無需自行安裝。請同學們打開你們的桌面環境,點擊桌面上的 Xfce 終端。

如果覺得終端窗口太小,可以在視圖中設置全屏模式。在編輯中,大家可以根據自己的喜好設置字體大小,背景顏色和代碼顏色等。

首先啟動服務器,輸入命令如下所示。

sudo service mysql start

運行結果如下圖所示,說明服務器啟動成功。

然后連接服務器,為了連接服務器,當調用 mysql 時,通常需要提供一個 MySQL 用戶名並且很可能需要一個密碼。在這里我們使用 root 用戶連接服務器(密碼環境設置為空,無需我們輸入密碼),輸入以下命令連接服務器。

mysql -u root

顯示如下圖,說明服務器啟動成功。

成功連接服務器后,可以在 mysql> 提示下輸入 QUIT 或 EXIT 斷開連接。

數據庫的操作

首先創建數據庫,其語法格式為 CREATE DATABASE <數據庫名字>

例如,我們創建一個名為 mysql_test 的數據庫。

CREATE DATABASE mysql_test;

創建后的輸出如下,說明創建成功。

用 SHOW DATABASES 來查看當前存在的所有數據庫。

SHOW DATABASES;

我們能夠在數據庫表中看到 mysql_test 這個數據庫的名字。

當創建成功后,我們需要讓 USE <數據庫名字> 這個命令執行后,才能夠使用該數據庫。

USE mysql_test

若你不想要這個數據庫了,可以使用 DROP DATABASE <數據庫名字> 來刪除指定數據庫。

例如,刪除剛才創建的名為 mysql_test 的數據庫。

DROP DATABASE mysql_test;

數據表的操作

數據庫就像一個衣櫃,而衣櫃里的小隔間就像空的數據表,在每個小隔間中放入不同類型的衣物,就像我們在數據表中添加數據。接下來我們就學習一下,如何使用數據表吧。

現在,我們使用 CREATE TABLE <數據表名> 在數據庫中創建數據表。

創建數據表的語法格式如下所示。

CREATE TABLE <表名>(
<字段名1> <數據類型>(<數據長度>),
<字段名2> <數據類型>(<數據長度>),
....
<字段名n> <數據類型>(<數據長度>)
);

例如,我們創建一個名為 gradesystem 的數據庫,我們在該數據庫中,創建名為student 的數據表,表中包括學號 ID、學生姓名、性別信息。

# 創建名為 student 的數據表,包含 id,stu_name,gender

CREATE TABLE student(id int(10),stu_name char(20),gender char(10));

顯示如下圖所示,說明創建成功。

然后再創建一張名為 mark 的表,表中包含學生 id 、課程名字和分數,為了讓代碼看起來更加的整潔美觀,您可以分行輸入,如下所示。

# 創建名為 mark 的數據表

CREATE TABLE mark
(
    id int(10), # 學生 id
    name char(20), # 課程名
    grade int(10) # 課程分數
);

創建數據表后,使用 SHOW TABLES 來查看一下,我們能夠看到剛才創建的兩張數據表的名字。

SHOW TABLES; # 查詢所有數據表

使用 DESCRIBE <數據表名字> 來查看創建數據表的完整信息。

例如,我們查看一下數據表 student 的完整信息。

DESCRIBE student;

從上圖中我們可以看到剛才創建的三個字段名,int 和 char 是 MySQL 的兩種數據類型,MySQL 的數據類型有很多,不熟悉的同學,可以看一下 MySQL 的數據類型。

在圖中 Null 全都為 YES,那是因為我們沒有指定列名為非空。若我們指定列名為NOT NULL,則會顯示 NO,如下所示。

到此,我們已經在數據庫中建立了兩張數據表。接着我們需要在表中添加數據。在表中添加數據,有 LOAD DATA 和 INSERT 兩種方式。

  • LOAD DATA 是一次可以添加多條數據,可以把文本文件中的數據直接加載到數據表中。
  • INSERT 是一次增加一條新的數據。

使用 LOAD DATA 加載數據,語句格式為:

LOAD DATA INFILE '加載數據文件的路徑' INTO TABLE 表名;

使用 INSERT 語句向表中插入數據,語句格式為:

INSERT INTO 表的名字(字段名1,字段名2,字段名3) VALUES(值1,值2,值3);

例如,我們用 INSERT 語句向 student 和 mark 表中分別添加數據。

在 student 表中插入了四條完整的學生信息數據,如下所示。

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');

值得注意的是,當我們插入的數據不完整時,列名對應位置會顯示為 NULL。我們盡量不要在表格中留有空值,因為空值會降低查詢的性能。我們可以使用數字 0 去代替 NULL,關於空值的處理在后面的實驗中會講解。

插入數據后,我們使用 SELECT 語句來查看表中的完整信息。語法格式為:SELECT * FROM <數據表名>

再向 mark 表中插入數據,如下所示。

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 類型的數據,我們需要用引號去修飾。除了 CHAR 類型,還有 VARCHARTEXTDATETIMEENUM等類型的數據也需要用單引號修飾。

用 SELECT 語句查看一下數據是否成功添加到數據表中。

數據表的查詢操作

檢索特定行的數據

檢索特定行的數據是通過條件限制去查詢符合設定條件的一行或者多行數據。

我們使用 SELECT * FROM <表名> WHERE <條件> 來查詢特定行的數據。

例如,我們查詢一下在 student 表中,學生姓名為 Ann 的學生信息。

SELECT * FROM student WHERE stu_name = 'Ann';

檢索特定列的數據

檢索特定列的數據就是通過指定字段名來查詢表中某些列的數據。我們可以使用SELECT <字段名> FROM <表名> 來查詢,這里可以寫入多個列名,用逗號隔開即可。

例如,我們查詢一下在 student 表中,所有學生的姓名。

SELECT stu_name FROM student;

同時檢索特定行和列的數據

同時檢索特定行和列的數據相當於前面兩種的結合體,我們可以使用 SELECT <字段名> FROM <表名> WHERE <條件> 來同時進行特定行和列的數據選擇。

例如,我們可以查詢一下,在 mark 表中,學生分數小於 90 分的成績。

SELECT grade FROM mark WHERE grade < 90;

排序檢索數據

我們可以對數據進行排序檢索,例如在檢索學生成績時,我們可以對學生成績進行排序,這樣使得查詢結果更加清晰。

使用 OREDER BY <字段名> 可實現對一列或者多列數據進行排序操作。該排序默認是升序,我們可以在其后添加關鍵字 DESC 變成降序。

例如,對 mark 表中,學生的成績進行排序。

SELECT grade FROM mark ORDER BY grade;

最后,我們可以把不想要的數據表給刪除了。可以使用 DROP TABLE <表名> 來刪除整個表,包括表中的數據和表的結構。

例如,我們將 student 表刪除。

如果想要保留表的結構,只是清空表中的數據,那么我們可以使用 TRUNCATE TABLE <表名>

還可以使用 DELETE FROM <表名> WHERE <字段名> 來刪除指定行的數據。

實驗總結

在本節實驗中,我們學習了 MySQL 服務器的啟動與連接,創建並使用數據庫,創建數據表並在表中添加數據,以及查詢表中數據的一些 SELECT 語句,包括行檢索、列檢索、排序檢索等操作。

后續課程中,你還可以學到:

點擊課程鏈接,學習完整課程內容~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM