MySQL之增刪改查(CRUD)使用及說明
一、什么是 CRUD?
CRUD 是數(shù)據(jù)庫最核心的四種操作:
| 字母 | 含義 | SQL語句 |
|---|---|---|
| C | Create(新增) | INSERT |
| R | Retrieve(查詢) | SELECT |
| U | Update(修改) | UPDATE |
| D | Delete(刪除) | DELETE |
二、準(zhǔn)備測試表
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT
);
三、C:INSERT 新增數(shù)據(jù)
向表中插入記錄。
1.插入一條數(shù)據(jù)
INSERT INTO student VALUES(1,'Tom',18);
2.指定字段插入
INSERT INTO student(id,name) VALUES(2,'Jerry');
3.插入多條數(shù)據(jù)
INSERT INTO student VALUES(3,'Alice',20),(4,'Bob',19);
4.插入查詢結(jié)果
當(dāng)你需要把一張表的數(shù)據(jù)“復(fù)制”到另一張表時使用。
-- 目標(biāo)表(用于備份或遷移)
CREATE TABLE student_backup(
id INT,
name VARCHAR(20),
age INT
);
場景一:兩張表結(jié)構(gòu)完全一樣(快速全量備份)
如果你只是想做一個完全一致的備份,可以使用 * 簡寫。
-- 只要 student_backup 的字段數(shù)量、順序、類型與 student 完全一致,即可使用 INSERT INTO student_backup SELECT * FROM student WHERE age > 18;
場景二:指定字段插入(靈活遷移)
如果兩張表結(jié)構(gòu)不同,或者你只想復(fù)制其中某幾列,必須顯式指定列名。
-- 僅將 id 和 name 備份,age 字段在目標(biāo)表中可能是默認(rèn)值或 NULL INSERT INTO student_backup (id, name) SELECT id, name FROM student WHERE age > 18;
四、R:SELECT 查詢數(shù)據(jù)
查詢表中的記錄。
1.查詢?nèi)繑?shù)據(jù)
SELECT * FROM student;
2.查詢指定字段
SELECT name,age FROM student;
3.查詢時使用表達(dá)式
SELECT name, age + 1 AS next_age FROM student;
說明:
- 表達(dá)式 (age + 1):實(shí)時計算結(jié)果,不會修改數(shù)據(jù)庫中的原始數(shù)據(jù)。
- 別名 (next_age):給結(jié)果集中的列起個新名字,方便查看。
4.去重查詢
SELECT DISTINCT age FROM student;
說明:
- 作用:過濾掉結(jié)果集中的重復(fù)行。
- 注意:這只是展示效果,數(shù)據(jù)庫里的原始記錄并不會被刪除。
5.條件查詢
- 比較運(yùn)算符:
| 運(yùn)算符 | 說明 |
|---|---|
| >, >=, <, <= | 大于、大于等于、小于、小于等于 |
| = | 等于 |
| !=, <> | 不等于 |
| BETWEEN … AND … | 范圍查詢 |
| IN(…) | 在指定集合中 |
| IS NULL | 判斷為空 |
| IS NOT NULL | 判斷不為空 |
| LIKE | 模糊查詢 |
- 邏輯運(yùn)算符:
| 運(yùn)算符 | 說明 |
|---|---|
| AND | 多個條件同時成立 |
| OR | 任意一個條件成立 |
| NOT | 條件取反 |
1.查詢年齡大于18
SELECT * FROM student WHERE age > 18;
2.查詢姓名為Tom
SELECT * FROM student WHERE name = 'Tom';
3.多條件查詢
SELECT * FROM student WHERE age >= 18 AND age <= 20;
4.范圍查詢
SELECT * FROM student WHERE age BETWEEN 18 AND 20;
- 閉區(qū)間:包含邊界值,等同于 age >= 18 AND age <= 20
5.集合查詢
SELECT * FROM student WHERE name IN ('Tom','Jerry');
- 邏輯:匹配括號內(nèi)任意一個值即可。
- 優(yōu)勢:比寫一長串的 OR 更加簡潔高效。
6.模糊查詢
SELECT * FROM student WHERE name LIKE 'T%';
說明:
- %:任意多個字符
- _:任意一個字符
7.空值查詢
SELECT * FROM student WHERE email IS NULL;
6.排序查詢
排序時,需要選取一個或多個列作為比較依據(jù)。
1.基礎(chǔ)語法
-- 升序(默認(rèn)):從小到大排。ASC 可省略。 SELECT * FROM student ORDER BY age ASC; -- 降序:從大到小排。 SELECT * FROM student ORDER BY age DESC; -- 使用表達(dá)式別名排序(ORDER BY 在 SELECT 之后執(zhí)行,所以認(rèn)識別名) SELECT name, age + 1 AS next_age FROM student ORDER BY next_age DESC;
2.多列排序(優(yōu)先級)
-- 先按id升序,id相同時,再按age降序 SELECT * FROM student ORDER BY id ASC, age DESC;
核心要點(diǎn)
順序未定義:
- 重要!
- 如果沒有指定 ORDER BY,數(shù)據(jù)庫返回結(jié)果的順序是不可靠且未定義的。
- 為了確保業(yè)務(wù)邏輯(如分頁顯示)的一致性,務(wù)必手動指定排序字段。
針對行排序:
- 排序是針對整行記錄的。
- 根據(jù)某一列排好序后,該行所有的字段會整體跟著移動。
排序關(guān)鍵字控制:
- ASC (Ascending):升序,默認(rèn)值。如果不寫,數(shù)據(jù)庫就默認(rèn)從小到大排。
- DESC (Descending):降序,必須顯式書寫,實(shí)現(xiàn)從大到小排。
NULL 的特殊性:
- 在 SQL 中,NULL 被視為最小值。
- 升序 (ASC) 時 NULL 在最前,降序 (DESC) 時 NULL 在最后。
多列排序的優(yōu)先級:
- 從左往右看:先按第一列排序,只有當(dāng)?shù)谝涣兄低耆嗤ㄆ骄郑r,才會參考第二列進(jìn)行內(nèi)部排序。
物理存儲不變:
- 排序只是改變了結(jié)果的展示順序,不影響數(shù)據(jù)庫中數(shù)據(jù)的物理存儲順序。
7.分頁查詢
當(dāng)數(shù)據(jù)庫表中有成千上萬條數(shù)據(jù)時,一次性全部查出來不僅速度慢,用戶也看不過來。分頁查詢的作用就是按需分批取出數(shù)據(jù)。
-- 【格式 A】取前 n 條 SELECT * FROM student LIMIT 2; -- 【格式 B】跳過 s 條,取 n 條 SELECT * FROM student LIMIT 1, 2; -- 【格式 C】使用 OFFSET 關(guān)鍵字(邏輯最清晰,推薦!) -- 效果:同樣是跳過 1 條取 2 條 SELECT * FROM student LIMIT 2 OFFSET 1;
直白邏輯(跳過與取出):
- 第一個數(shù)字:是你打算“扔掉”不要的數(shù)量(偏移量 Offset)。
- 第二個數(shù)字:是扔掉后你要“連續(xù)拿走”的數(shù)量(行數(shù) Count)。
- 記住: 數(shù)據(jù)庫的下標(biāo)是從 0 開始的。跳過 0 條 = 從第 1 條開始取。
邊界情況:沒數(shù)據(jù)了怎么辦?
- 如果 LIMIT 請求的范圍超出了表中的實(shí)際數(shù)據(jù)量(例如:表只有 5 條,你寫 LIMIT 10, 5):
- 結(jié)果:數(shù)據(jù)庫不會報錯,也不會返回帶 NULL 的行,而是直接返回空結(jié)果集。
物理存儲不變:最后再次強(qiáng)調(diào),分頁只是為了展示。它不會刪除或移動數(shù)據(jù)庫里的原始數(shù)據(jù)。
實(shí)戰(zhàn):網(wǎng)頁分頁公式
- 假設(shè)每頁顯示 pageSize 條,當(dāng)前是第 pageNum 頁:
- SQL 公式:LIMIT (pageNum - 1) * pageSize, pageSize
八、U:UPDATE 修改數(shù)據(jù)
修改數(shù)據(jù)庫服務(wù)器硬盤上的原始數(shù)據(jù)。
修改Tom年齡為20
UPDATE student SET age = 20 WHERE name = 'Tom';
同時修改多個字段
UPDATE student SET name = 'Lucy', age = 21 WHERE id = 1;
注意:
- 不加 WHERE 會修改整張表。
九、D:DELETE 刪除數(shù)據(jù)
刪除Tom
DELETE FROM student WHERE name = 'Tom';
刪除全部數(shù)據(jù)
DELETE FROM student;
注意:
- 不加 WHERE 會刪除所有記錄。
十、總結(jié)速記
- 新增:INSERT
- 查詢:SELECT
- 修改:UPDATE
- 刪除:DELETE
- 條件:WHERE
- 排序:ORDER BY
- 分頁:LIMIT
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL8.x登陸root用戶突然提示mysql_native_password的實(shí)現(xiàn)
本文主要介紹了MySQL 8.x登陸root用戶突然提示mysql_native_password,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程
mysql數(shù)據(jù)庫的重新安裝是一個麻煩的問題,很難卸除干凈,下面這篇文章主要給大家介紹了關(guān)于在Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-07-07

