最新MySQL增刪改查-新手極速上手

(一) 引言

當你登錄你的QQ賬號和別人吹水的時候,當你期末交作業去度娘複製的時候,當你在工作中登錄一些網站的時候,再比如當你查看自己幾乎沒有什麼餘額的銀行卡的時候(捂臉),或許自己也沒注意,(非需要,大部分人也不想注意哈哈哈)我們一直都在以某種方式與數據庫打交道,或許你是一個開發人員,也或許你也只是一個普通的用戶,數據庫與我們的生活息息相關,作爲一名程序員,現在學習 MySQL 和 Oracle 的會多一些,像微軟的 SQL Server 以前配合 asp 的時候用的還是挺多的,不過現在就沒那麼流行了,

所以我們先從 MySQL 講起,同時文章中穿插一些 SQL 的基本概念,我覺得能更好的理解這幾種 SQL 型數據庫哈

關於 MySQL 的幾篇文章,在前一年左右大概更新過幾篇,但是都差強人意,所以最近加班加點,重新將 MySQL 相關的,例如語法、約束、事務等等重新整理一遍,第一篇先來看一下入門的一些語法和操作

既然你都打開這篇文章了,那你就註定不是一個村民,這一局我們跳 Java 程序員!

開發學習中,想滿足一些需求,與數據打交道這可太頻繁了,如何存儲這些數據就是你考慮的問題了,當然不考慮性能,管理、安全等等,你的選擇可就多了,存個 txt,存個xml,甚至還可以存個excel等等,有位剛入門朋友曾經問過我這樣一個問題 “他在學習IO的一些技術的時候,常常會簡單的保存一些數據到 .txt 文件中,爲什麼還需要數據庫呢?”,這樣的一些小Demo,大家在Java基礎的學習中應該都是做過的,那麼我們下面就從這個問題講起~

(二) 爲什麼使用數據庫?

(1) 查詢速度

假定我們將數據全部存儲在一個普通文件中(data.txt)_(以逗號間隔)

......
"Eminem",male,1972,"USA"
"Rihanna",female,1988,"Barbados"
"Taylor Swift",1989,female,"USA"
"Aavril Lavigne",1984,female,"Canada"
......

如果在我們的數據極爲龐大的情況下,我們需要查詢其中的一些數據,例如,查詢Eminem的國籍,我們一般會使用遍歷,但是毫無疑問,這個響應時間會變得極其緩慢,但是使用數據庫後,它所提供的一些索引技術等就可以解決這樣的問題

(2) 數據完整有效

"Rihanna",female,1988,"Barbados"
"Rihanna",female,1995,"USA"

如果數據中出現了重名的情況,又如何判斷是不是同一個人呢?

如果data.txt文件中的數據被錯誤的修改,例如出生年份被修改爲其他類型字符串這種無效表達怎麼辦?

或許你可以在程序中寫一些邏輯判斷語句進而篩選處理這些問題,但是仍舊在數據較爲龐大的情況下,會出現各種各樣的問題,增加了開發者的開發難度,而數據庫本身就制定了一些約束,從而保證了數據的完整且,有效,從而使開發者只需要更加註重於程序本身的設計,而不用花費過多的時間去處理數據上的一些細節問題

(3) 數據共享

常用來簡單存儲數據的 txt/excel 等均屬於單一文件,並且都是無法共享的,只支持當前用戶使用並且修改

數據庫允許用戶共享,不同的用戶可以同時存取數據庫中的數據,用戶也可以用各種方式通過接口使用數據庫,並提供數據共享

(4) 數據的安全性

在我們前者中,數據的修改是很隨意的
但是在實際開發中,我們有時候需要面臨,多個用戶檢索、修改同一文件中的數據,或者在併發情況下,寫同一文件或者記錄,而數據庫基於鎖等的一些技術便可以幫助我們解決這些問題

(5) 故障恢復

由於邏輯或者物理上的錯誤,導致了系統的錯誤操作,從而使得數據被破壞,如何快速恢復數據,我們上面的單一文件系統顯然無法幫助我們解決問題,而數據庫卻有相關機制去彌補、處理相關問題

上面我們僅僅從幾個常見的點分析了爲什麼使用數據庫,當然遠遠不止這些,所以總的來說就是數據庫其特殊的存儲以及管理方式,既提高了效率,也極大的減少了開發人員的負擔

總結一下:數據庫 em… 是個好東西!

(三) MySQL 基本操作

至於安裝的部分,這裏就不提及了,否則篇幅會過於的長,無論是選擇安裝版本也好,免安裝的壓縮包也好,選對版本,裝好就行了,可以去網上參考一些教程,至於版本 5.5 -> 5.6 -> 5.7 -> 8 都是可以的,畢竟只是單純的學習 MySQL,不用過多的考慮和 Java 等的版本或者配置問題,我這臺機器版本爲 5.7 哈

同時今天演示的所有內容,直接在 cmd 命令行中執行也可以,直接使用一些圖形化工具,例如 Navicat、SQLyog 等等都是可以的,圖形化工具看數據會更舒服一些,但是即使圖形化工具中,入門的學習,我還是極其不推薦直接點擊按鈕,執行創建插入等等操作,過於依賴圖形界面,會讓你的惰性變得更加的大,對在高級語言中自己寫 SQL 也是百害無一利,一定要自己書寫,執行,才能更好的理解與學習哈

(1) 啓動服務

首先登錄之前需要啓動,相關的 MySQL 服務,有兩種方式

1、通過服務窗口設置

  • cmd–> services.msc --> 找到 MySQL 服務 --> 設置啓動,禁止等

2、通過命令啓動

net start mysql : 啓動mysql的服務

net stop mysql : 關閉mysql服務

(2) 登錄退出

A:登錄

1、安裝版 點擊 MySQL 5.7 Command Line Client 後輸入密碼即可(安裝後就有,可以看任務欄)

2、通過命令行

  • 如果沒有配置環境變量,需要在通過 cd 命令指向到 mysql 安裝目錄下的 bin文件夾
  • 如果 MySQL/bin 已經在環境變量中了,直接執行命令就可以了

3、命令行示例:

① mysql -u用戶名 -p密碼

② mysql -u用戶名 -p

③ mysql -h 地址 -P 端口 -u用戶名 -p

舉例:用戶名:root,密碼:root99

  • mysql -uroot -proot99
    • 這種情況下,會彈出一個警告,它認爲在命令行中明文的輸入密碼是不安全的
    • 說明:我用的是 Win 下的 PowerShell ,使用 cmd 是一樣的哈

  • mysql -uroot -p
    • 這種情況下,密碼輸入會被星號遮掩,警告就消失了

  • mysql -h 192.168.3.144 -P 3306 -uroot -p

    • 這種方式用來連接遠程的數據庫,我這裏用我本地的虛擬機演示了一下

B:退出

1、 exit

2、quit

(四) SQL簡單認識

(1) 什麼是SQL?

A:基本概念

Structured Query Language:結構化查詢語言

SQL就是訪問和處理關係數據庫的計算機標準語言,它定義了操作所有關係型數據庫的規則

雖然 SQL 的語法標準很多部分可以直接在其他 DBMS 上使用,不過大部分數據庫在SQL的標準上進行了擴展。而每一種數據庫操作的方式存在不一樣的地方,稱爲**“方言”**

但凡涉及到關係型數據庫就離不開SQL,例如在電商網站中存入商品信息,遊戲中存儲裝備道具信息等

B:常見分類

常見的關係型數據庫MySQLOracle、Microsoft SQL Server、Microsoft Access、DB2、

商用:Oracle、DB2、Microsoft SQL Server

開源:MySQL

桌面:Microsoft Access

常見的非關係型數據庫:Cloudant、MongoDb、Redis、HBase

C:總結

總之:SQL 是一種強力的語言,我們可以通過一定簡潔的語法,實現各種複雜的需求

D:補充事項

1、SQL語句 單行或多行書寫,以分號結尾,並且可以使用空格和縮進來增強語句的可讀性

2、MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫

3、三種註釋

  • A:單行註釋:
-- 註釋內容
# 註釋內容 (這是MySQL獨有的)
  • B:多行註釋:
/* 註釋內容 */

(2) SQL分類

分類 作用
數據定義語言——DDL(Data Definition Language) 允許用戶定義 (創建) 數據庫對象:數據庫,表,列等
數據操作語言——DML(Data Manipulation Language) 允許用戶對數據庫中表的數據進行增刪改
數據查詢語言——DQL(Data Query Language) 允許用戶查詢數據庫中表的記錄(數據)
數據控制語言——DCL(Data Control Language) 用來定義數據庫的訪問權限和安全級別,及創建用戶

(五) MySQL 語法詳解

(1) 操作數據庫

其實這部分語法的介紹,圍繞的就是 CURD

  • CURE --> C:創建(Create)+ U:修改(Update)+ R:查詢 / 讀取(Retrieve)+ D:刪除(Delete)

這一部分例如創建、查詢、使用數據庫是比較常用的,但是對於數據庫的操作並不會很頻繁,一般初期設置好後,很少會去修改數據庫,所以這一部分,快速瞭解就好了,標題中標 ※ 符號的要會用

A:創建數據庫 ※

1、創建數據庫

CREATE DATABASE 數據庫名稱;

舉例:

mysql> CREATE DATABASE mysql_grammar_test;

Query OK, 1 row affected (0.12 sec)

2、創建數據庫,判斷不存在,再創建

CREATE DATABASE IF NOT EXISTS 數據庫名稱;

3、創建數據庫,並且制定字符集

CREATE DATABASE 數據庫名稱 CHARACTER SET 字符集名;

B:修改數據庫

1、修改數據庫的字符集

ALTER DATABASE 數據庫名稱 CHARACTER SET 字符集名稱;

C:查詢數據庫 ※

查詢所有數據庫名稱

SHOW DATABASES

查詢某個數據庫的字符集

  • 通過查詢某個數據庫的創建語句就可以看到其字符集,前面創建的時候,我們並沒有指定字符集,但是可以看到默認數據庫字符集爲 utf-8
SHOW CREATE DATABASE 數據庫名稱;

舉例:

mysql> SHOW CREATE DATABASE mysql_grammar_test;
+--------------------+-----------------------------------------------------------------------------+
| Database           | Create Database                                                             |
+--------------------+-----------------------------------------------------------------------------+
| mysql_grammar_test | CREATE DATABASE `mysql_grammar_test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------------+-----------------------------------------------------------------------------+
1 row in set (0.00 sec)

D:刪除數據庫

1、刪除數據庫

DROP DATABASE 數據庫名稱;

2、判斷數據庫存在,存在再刪除

DROP DATABASE IF EXISTS 數據庫名稱;

E:使用數據庫 ※

關於數據庫常用的增刪改查就說完了,下面要開始講解關於表和數據了,但是我們必須指定使用的數據庫,纔可以針對這個數據進行一些操作表或數據等等操作

1、查詢當前正在使用的數據庫名稱

SELECT DATABASE();

2、使用數據庫

USE 數據庫名稱;

(2) 操作表

符號規定:下面展示一些定義的時候,爲簡便理解,使用中文配合符號表述(會有具體舉例,不用擔心理解不了)

  • <> 中的內容爲實際的語義
  • [] 中的內容爲任選項(不填寫也可)
  • {} 中的內容必須顯式的指定
  • | 爲選項符
  • [,...n] 表示前面的項可以重複多次

A:創建表 ※

SQL 語言通過定義一個關係所對應的基本表來完成關係模式的定義,其語句格式爲:

CREATE TABLE 表名(
	<列名1> <數據類型1> [<列級完整約束條件>],
	[<列名2> <數據類型2> [<列級完整約束條件>],...],
	[<表級完整約束條件>]
);

當然了你看完這個定義可能一下子不好理解,我在後面,會就着一個實際的例子,來和大家講解,在此之前有兩個重要的知識需要補充:

① 數據類型

關係中的每一個屬性,都來自一個域,它的取值必須是域中的值,而在 SQL 中,這個域的概念,用數據類型來實現,就比如,我們定義的這一列數據都只能是 8個單位長度以內的字符串

下面列了幾種常見的數據類型

數據類型 含義
CHAR(n) 長度爲 n 的定長字符串
VARCHAR(n) 最長度爲 n 的邊長字符串
INT 或 INTERGER 長整數
SMALLINT 短整數
DOUBLE(6,3) 雙精度浮點數,代表共保留6位數字,小數點後保留3位(也可不設置直接使用)
FLOAT(n) 浮點數,精度至少爲 n 位數字(也可不設置直接使用)
DATE 日期,只包含年月日,yyyy-MM-dd
TIMESTAMP 時間戳類型,包含年月日時分秒,yyyy-MM-dd HH:mm:ss

② 約束條件

約束,就是針對屬性值的一些約束條件,只針對某一列,叫做列級約束、針對多列屬性的約束,叫做表級約束,怎麼理解呢?就例如某一列叫做 學號,我們就指定約束,這一行不允許爲 NULL 等等

約束要想說清楚,還是需要一點篇幅的,同時例如外鍵約束等,就會引申出一些多表之間的問題,爲了簡便,在這一篇入門文章中就不寫關於約束以及多表的問題了,我後面兩篇將這部分相關的內容

③ 創建表舉例

簡單解釋一下,創建一個學生表,其中有這麼幾個字段(列)學號、姓名、年齡、出生日期、成績、插入時間,指定 stu_id 也就是學號作爲主鍵,至於一些非空或者 id 自增我都沒有設置哈

CREATE TABLE student(
	stu_id INT,
	stu_name VARCHAR(32),
	stu_age INT,
	stu_birthday DATE,
	stu_score DOUBLE(4,1),
	stu_insert_time TIMESTAMP,
	PRIMARY KEY(stu_id)
);

B:修改表

1、修改表名

ALTER TABLE 表名 RENAME TO 新表名;

2、修改列名稱和類型

ALTER TABLE 表名 CHANGE 列名 新列名 新數據類型;

3、修改類型

ALTER TABLE 表名 MODIFY 列名 新數據類型;

4、修改表的字符集

ALTER TABLE 表名 CHARACTER SET 字符集名稱;

5、添加一列

ALTER TABLE 表名 ADD 列名 數據類型;

C:查詢表

1、查詢某個數據庫中所有的表名

SHOW TABLES;

2、查詢表結構

DESC 表名;

D:刪除表

DROP TABLE 表名;

Drop TABLE IF EXISTS 表名;

(3) 增刪改表中數據 ※

這一塊的內容,實際上纔是我們通俗意義上的增刪改查,這一塊也是用的最多的,畢竟數據庫和表,一般初期都會設計好,除非臨時有大的需求變更,否則很少會去修改

A:添加數據 ※

1、基本語法:

INSERT INTO 表名(列名1,列名2,...列名n) VALUES(1,2,...值n);

2、舉個例子

就用上面創建的學生表

INSERT INTO student(stu_id, stu_name, stu_age, stu_birthday, stu_score, stu_insert_time) Values(1001,'張三',20,'2020-05-30',66.6,'2020-05-30 19:00:35');

3、注意

  • 列名和值要一一對應
  • 除數字類型,其他的類型都需要用單/雙引號括起來(一般用單引號)
  • 如果不再表名後定義列名,如果值與實際列名匹配,則自動賦值,否則會報錯 Column count doesn't match value count

B:刪除數據 ※

1、基本語法

DELETE FROM 表名 [WHERE 條件]

刪除數據的條件就很靈活了,在這個部分,我給大家列幾種例子,例如在插入這樣三條記錄的基礎上

INSERT INTO student(stu_id, stu_name, stu_age, stu_birthday, stu_score, stu_insert_time) Values(1001,'張三',20,'2020-05-30',66.6,'2020-05-30 19:00:35');

INSERT INTO student(stu_id, stu_name, stu_age, stu_birthday, stu_score, stu_insert_time) Values(1002,'李四',25,'2020-05-30',66.6,'2020-05-30 19:00:35');

INSERT INTO student(stu_id, stu_name, stu_age, stu_birthday, stu_score, stu_insert_time) Values(1003,'王五',16,'2020-05-30',66.6,'2020-05-30 19:00:35');
  • 例 1:刪除 stu_id(學號)值爲 1001的記錄
DELETE FROM student WHERE stu_id = 1001;
  • 例 2:刪除 stu_name(姓名)值爲張三的記錄
DELETE FROM student WHERE stu_name = '張三';
  • 例 3:刪除 stu_age(年齡)大於 20 的記錄
DELETE FROM student WHERE stu_age >= 20;

2、刪除所有數據

如果不填寫刪除語句中的條件部分,則會刪除表中的所有數據

 DELETE FROM 表名;

但是這種方式並不推薦,因爲這種方式下有多少條記錄就會執行多少次刪除操作,數據量大的情況下,效率很低

推薦使用

TRUNCATE TABLE 表名;

它的機制是,先刪除掉整個表,然後再創建一個空的,與原來一樣的表,效率會更高一些

C:修改數據 ※

UPDATE 表名 SET 列名1 =1, 列名2 =2,... [WHERE 條件];

關於修改數據,一般情況下,都是通過在條件中,指定某個 id 值,然後去修改,因爲這個 id 值一般都是主鍵,能確定唯一數據

  • 例 1:例如下面,修改學號爲 1001 學生的 出生日期和成績
UPDATE student SET stu_birthday = '2020-02-22', stu_score = 90.8 WHERE stu_id = 1001;

你自己測試的時候可以發現,換種寫法即使不指定 WHERE stu_id = 1001 似乎也能執行成功

UPDATE student SET stu_id = 1001, stu_birthday = '2020-02-22', stu_score = 90.8;

這是因爲前面我們已經傳入了主鍵 stu_id = 1001 ,一般我們修改數據還是在後面設置條件更多

  • 補充:一般,我們在高級語言中使用 MySQL 的時候,不考慮使用插件,自己寫 SQL 的時候大部分情況都是直接寫出所有字段的,並不會向上面一樣,只寫出某幾項,因爲我們不確定每次用戶需要修改的數據是哪幾項,最後執行的效果可以模擬爲:
UPDATE student SET stu_id = 1001, stu_name = '張三', stu_age = 20, stu_birthday = '2020-01-01', stu_score = 90.8, stu_insert_time = '2020-02-22' WHERE stu_id = 1001;

也就是,不需要更新的也列了出來,只不過更新的值沒有變化而已,這樣可以滿足用戶各種的修改情況,這部分內容,在 JDBC 的相關文章中才是重點,這裏也不過多提及了

(4) 查詢表中的數據 ※

這一塊內容比較多,單獨摘出來說,多說一句,這一塊的內容,還只是涉及到單表的查詢,至於多表複雜的查詢,會在下一篇講完約束以後提到

A:查詢所有

這個非常常用,* 代表所有,然後 FROM 指定表名就可以了,它會將所有記錄的完整信息列出來

SELECT * FROM 表名;

提一個小 Tips ,如果特別注重效率的話例如在 MyBatis 配合插件,就會直接使用插件生成的 Base_Column_List ,作爲查詢的值,這個Base_Column_List 就代表所有的字段(列),用 * 如果後期字段存在增長的問題,在一定程度上這樣的書寫方式會提高一些效率,但是就普通的項目而言,實際上,也沒有太大關係

B:查詢指定字段(列)

如果只需要查詢指定的幾個字段,可以通過下面的方法,列出指定字段,通過逗號分隔

SELECT 字段名1,字段名2... FROM 表名;

C:條件查詢

1、所有的條件查詢語句,都是基於 WHERE 進行使用的

2、WHERE 後配合各種運算符,就可以靈活的實現很多查詢需求

  • > 、< 、<= 、>= 、= 、<>
  • IS NULL 或 IS NOT NULL
  • AND 或 &&
  • BETWEEN...AND
  • OR 或 ||
  • NOT 或 !
  • IN( 集合)
  • LIKE:模糊查詢
    • _單個任意字符佔位符
    • %多個任意字符佔位符

3、舉些例子

  • 例 1 :查詢成績不等於 66.6 的學生
SELECT * FROM student WHERE stu_score != 66.6;

SELECT * FROM student WHERE stu_score <> 66.6;
  • 例 2:查詢成績是否爲 NULL(例如未錄入)
-- 查詢哪些學生成績字段爲 NULL
SELECT * FROM student WHERE stu_score IS NULL;	

-- 查詢哪些學生成績字段不爲 NULL
SELECT * FROM student WHERE stu_score IS NOT NULL;	

-- 這是一種錯誤的寫法,NULL的判斷是不能用等號的
SELECT * FROM student WHERE stu_score = NULL; (錯誤!!!)
  • 例 3:查詢成績大於等於60小於80的學生(成績良好)
SELECT * FROM student WHERE stu_score >=60.0 AND stu_score <= 80.0;	

SELECT * FROM student WHERE stu_score >=60.0 && stu_score <= 80.0;	

SELECT * FROM student WHERE stu_score BETWEEN 60.0 AND 80.0;	
  • 例 4:查詢成績爲 40.0 ,90.8 的學生,下面三種查出來結果是一樣的
SELECT * FROM student WHERE stu_score = 40.0 OR stu_score = 90.8;	

SELECT * FROM student WHERE stu_score = 40.0 || stu_score = 90.8;	

SELECT * FROM student WHERE stu_score IN (40.0,90.8);

這裏要注意了,我上面在 OR 中使用 = 測試,是爲了引出 IN 的這個使用方式,但是就沒有很好的體現出 OR 和 AND 的區別了

  • AND 的字面意思爲並且,而 OR 爲或者,也就是說 OR 的時候,只需要滿足一邊的要求就可以查出來
  • 當例如我們也使用大於小於這種運算符,就會體現出問題了
SELECT * FROM student WHERE stu_score >= 60.0 OR stu_score <= 80.0;	

它的意思是先查詢到成績 >= 60.0 的所有數據,然後再查詢到成績 <= 80.0 的所有數據,這一點要注意哦

  • 例 5:模糊查詢:查詢姓張的學生有哪些
SELECT * FROM student WHERE stu_name LIKE '張%';
  • 例 6:模糊查詢:查詢姓名中第二個字爲四的學生
SELECT * FROM student WHERE stu_name LIKE '_四%';
  • 例 7:模糊查詢:查詢姓名長度爲 4 個字的學生(四個_
SELECT * FROM student WHERE stu_name LIKE '____';
  • 例 8:模糊查詢:查詢姓名中含有五這個字的學生
SELECT * FROM student WHERE stu_name LIKE '%五%';

D:排序查詢

我們很多時候,查詢到的數據都是按照主鍵,例如 id 爲順序的,不過如果我們想要查詢到的數據按照一定的方式排序,就用到了 ORDER BY 這個語句,語法如下

ORDER BY 排序字段1 排序方式1 ,排序字段2 排序方式2...

-- 排序方式:
	ASC:升序,默認的。
	DESC:降序

注意:

1、只有排序字段1的值相同時,纔會執行排序字段2,如果沒有排序字段2,則按照主鍵默認排序

2、默認的排序方式是升序,即由低到高

  • 例 1:按成績從高到低排序查詢(降序)
SELECT * FROM student ORDER BY stu_score DESC; 

  • 例 2:按成績以及從高到低排序查詢(降序),其次按照年齡由低到高排序(升序)
SELECT * FROM student ORDER BY stu_score DESC, stu_age ASC; 

E:分組查詢

1、基本語法

GROUP BY 分組字段
  • 例 1:按照年齡分組,分別查詢年齡爲18歲以及20歲同學的平均分,以及人數, 同時要求:不及格的同學,不計入分組
SELECT stu_age, AVG(stu_score), COUNT(stu_id) FROM student WHERE stu_score > 60 GROUP BY stu_age;

說明:AVG 方法是求平均值的,COUNT 方法是求個數的

這個可能不好理解,同樣配個圖,先看一下所有的數據,有7位同學,年齡只有18以及20這兩個,當然一般用男女或者班級,系別等區分會更加貼近現實,我只是懶得,再創建一張表了,就姑且用年齡演示就好了

可以看到對應的一些值就查到了,並且不及格的同學並沒有參與到分組中

  • 例 2:按照年齡分組,分別查詢年齡爲18歲以及20歲同學的平均分,以及人數, 同時要求:分數低於60分的人,不參與分組,分組之後,人數要大於 3 個人
SELECT stu_age, AVG(stu_score), COUNT(stu_id) FROM student WHERE stu_score > 60 GROUP BY stu_age HAVING COUNT(stu_id) > 2;

這個地方就要引入一個新的概念,就是 HAVING

WHERE 和 HAVING 有什麼區別呢?

  • WHERE 在分組之前進行限定,不滿足則不分組
  • HAVING在分組之後進行限定,不滿足則查不到
  • WHERE 後不可以跟聚合函數,HAVING 可以進行聚合函數的判斷,例如 AVG 方法、COUNT 方法都是聚合函數

執行結果:

聚合函數補充:

聚合函數:將一列數據作爲一個整體,進行縱向的計算,儘量選擇不爲空的列進行計算,否則就需要使用 IFNULL 函數進行判斷

COUNT:計算個數 -- 一般選擇非空的列:主鍵
MAX:計算最大值
MIN:計算最小值
SUM:計算和
AVG:計算平均值

F:分頁查詢

如果查詢到的數據太多,在同一個頁面上顯示,很麻煩,分頁查詢就可以解決這個問題

1、基本語法

limit 開始的索引,每頁查詢的條數;

2、基本書寫公式套路

開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
  • 例 1:每頁顯示 2 條數據
SELECT * FROM student LIMIT 0,2; -- 第1頁

SELECT * FROM student LIMIT 2,2; -- 第2頁

SELECT * FROM student LIMIT 4,2; -- 第3頁

SELECT * FROM student LIMIT 6,2; -- 第4頁

我暫時表中有7條數據 id 從 1001-1007 ,所以例如我執行顯示第二頁的語句,就會顯示 id 爲1003 以及 1004 的數據

另外,LIMIT 是一個MySQL"方言",在其他數據庫中就不支持了,但是不同的數據庫,都會有一些替代的寫法

(六) 結尾

如果文章中有什麼不足,歡迎大家留言交流,感謝朋友們的支持!

如果能幫到你的話,那就來關注我吧!如果您更喜歡微信文章的閱讀方式,可以關注我的公衆號

在這裏的我們素不相識,卻都在爲了自己的夢而努力 ❤

一個堅持推送原創開發技術文章的公衆號:理想二旬不止

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章