最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL DML語(yǔ)句定義及常見(jiàn)用法實(shí)戰(zhàn)指南

 更新時(shí)間:2026年04月01日 09:23:34   作者:泯仲  
本文介紹了DML(數(shù)據(jù)操作語(yǔ)言)的核心概念及其在MySQL中的應(yīng)用場(chǎng)景,包括插入(INSERT)、更新(UPDATE)、刪除(DELETE)和查詢(SELECT)四大操作,并詳細(xì)講解了每種操作的語(yǔ)法和注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧

上一章我們學(xué)習(xí)了DDL語(yǔ)句,掌握了數(shù)據(jù)庫(kù)和表的“創(chuàng)建、修改、刪除”等結(jié)構(gòu)定義操作,相當(dāng)于搭建好了數(shù)據(jù)存儲(chǔ)的“容器”。今天我們進(jìn)入更核心的學(xué)習(xí)——DML語(yǔ)句,它是操作“容器”中數(shù)據(jù)的關(guān)鍵,學(xué)會(huì)DML,你才能真正實(shí)現(xiàn)數(shù)據(jù)的增、刪、改、查,解鎖MySQL的核心使用場(chǎng)景。

一、什么是DML?新手必懂的核心定義

DML 的全稱是 Data Manipulation Language(數(shù)據(jù)操作語(yǔ)言),它與上一章的DDL(數(shù)據(jù)定義語(yǔ)言)核心區(qū)別在于:DDL操作的是“數(shù)據(jù)庫(kù)對(duì)象的結(jié)構(gòu)”,而DML操作的是“表中的數(shù)據(jù)”,不改變表的結(jié)構(gòu)本身。

簡(jiǎn)單來(lái)說(shuō),DDL是“建房子”(搭建表結(jié)構(gòu)),DML就是“住人、裝修”(操作表中數(shù)據(jù))。在MySQL中,DML語(yǔ)句的核心作用是對(duì)表中的數(shù)據(jù)進(jìn)行增、刪、改、查,也是我們?nèi)粘i_(kāi)發(fā)中使用頻率最高的SQL語(yǔ)句。

這里有一個(gè)新手容易混淆的知識(shí)點(diǎn):嚴(yán)格來(lái)說(shuō),“查詢數(shù)據(jù)”的SELECT語(yǔ)句屬于DQL(Data Query Language,數(shù)據(jù)查詢語(yǔ)言),但在很多書(shū)籍、教程以及面試中,SELECT語(yǔ)句通常會(huì)被包含在DML的范疇中,我們今天也統(tǒng)一按這個(gè)習(xí)慣講解,更貼合實(shí)際開(kāi)發(fā)場(chǎng)景。

常見(jiàn)的DML操作及對(duì)應(yīng)SQL語(yǔ)句,用表格總結(jié)更清晰,新手建議收藏:

操作類型

SQL語(yǔ)句

說(shuō)明

插入數(shù)據(jù)

INSERT

向表中新增一條或多條數(shù)據(jù)記錄

更新數(shù)據(jù)

UPDATE

修改表中已存在的數(shù)據(jù)記錄

刪除數(shù)據(jù)

DELETE

刪除表中已有的數(shù)據(jù)記錄

查詢數(shù)據(jù)

SELECT

檢索表中的數(shù)據(jù)(嚴(yán)格來(lái)說(shuō)屬于DQL)

? 新手注意:DML語(yǔ)句與DDL語(yǔ)句的核心區(qū)別——DML語(yǔ)句執(zhí)行后不會(huì)自動(dòng)提交事務(wù)(可回滾),而DDL語(yǔ)句會(huì)自動(dòng)提交事務(wù)(不可回滾),這個(gè)區(qū)別我們?cè)诤竺鏁?huì)詳細(xì)講解。

二、INSERT:插入數(shù)據(jù)(新增記錄)

INSERT語(yǔ)句是向表中添加新數(shù)據(jù)的核心語(yǔ)句,語(yǔ)法簡(jiǎn)單但有很多細(xì)節(jié)需要注意,尤其是“列和值的匹配”,新手很容易在這里踩坑。下面我們結(jié)合實(shí)例,從基礎(chǔ)到進(jìn)階,一步步掌握INSERT的用法。

1. 基本語(yǔ)法(推薦用法)

最規(guī)范、最推薦的插入語(yǔ)法,明確指定要插入的列名和對(duì)應(yīng)的值,避免因表結(jié)構(gòu)變更導(dǎo)致插入失?。?/p>

-- 基本語(yǔ)法:INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);
-- 注意:列名和值的順序必須一一對(duì)應(yīng),數(shù)據(jù)類型也要匹配

2. 基礎(chǔ)示例

我們以上一章創(chuàng)建的“學(xué)生表(student)”為例(先創(chuàng)建表,新手可直接復(fù)制執(zhí)行):

-- 先創(chuàng)建student表(若已存在可跳過(guò))
CREATE TABLE IF NOT EXISTS student (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT CHECK(age >= 0),
    major VARCHAR(100) NOT NULL
);
-- 插入一條學(xué)生數(shù)據(jù)
INSERT INTO student (id, name, age, major)
VALUES (1, '張三', 20, '計(jì)算機(jī)科學(xué)');
-- 插入成功后,可通過(guò)SELECT查詢驗(yàn)證(后面會(huì)詳細(xì)講SELECT)
SELECT * FROM student;

? 新手注意:如果表的主鍵設(shè)置了AUTO_INCREMENT(自動(dòng)增長(zhǎng)),插入時(shí)可以不指定id列,MySQL會(huì)自動(dòng)生成遞增的主鍵值,更便捷:

-- 不指定id(自動(dòng)增長(zhǎng)),僅插入name、age、major
INSERT INTO student (name, age, major)
VALUES ('張三', 20, '計(jì)算機(jī)科學(xué)');

3. 一次插入多條數(shù)據(jù)(高效用法)

如果需要插入多條數(shù)據(jù),無(wú)需多次執(zhí)行INSERT語(yǔ)句,可在VALUES后拼接多個(gè)值列表,執(zhí)行效率更高,語(yǔ)法如下:

-- 一次插入多條數(shù)據(jù),用逗號(hào)分隔多個(gè)值列表
INSERT INTO student (name, age, major)
VALUES 
(2, '李四', 21, '軟件工程'),  -- 第一條
(3, '王五', 19, '人工智能'),  -- 第二條
(4, '趙六', 22, '網(wǎng)絡(luò)工程');  -- 第三條

? 優(yōu)勢(shì):減少與數(shù)據(jù)庫(kù)的交互次數(shù),提升插入效率,尤其適合批量插入少量數(shù)據(jù)(大批量數(shù)據(jù)建議用LOAD DATA INFILE等方式)。

4. 插入全部列(不推薦用法)

如果要給表中的所有字段都插入值,可以省略列名,但這種方式不推薦,因?yàn)橐坏┍斫Y(jié)構(gòu)發(fā)生變更(如新增、刪除列),插入語(yǔ)句就會(huì)報(bào)錯(cuò):

-- 省略列名,必須按表中字段的順序插入所有值
INSERT INTO student VALUES (5, '孫七', 20, '信息安全');
-- 錯(cuò)誤示例:如果表新增了gender列,省略列名插入就會(huì)報(bào)錯(cuò)
-- INSERT INTO student VALUES (6, '周八', 21, '大數(shù)據(jù)');  -- 字段數(shù)量不匹配,報(bào)錯(cuò)

?? 警告:日常開(kāi)發(fā)中,盡量不要省略列名,避免因表結(jié)構(gòu)變更導(dǎo)致插入失敗,提升代碼的可維護(hù)性。

三、UPDATE:更新數(shù)據(jù)(修改記錄)

UPDATE語(yǔ)句用于修改表中已存在的數(shù)據(jù),是日常開(kāi)發(fā)中高頻使用的語(yǔ)句,但也是新手最容易踩坑的語(yǔ)句——忘記寫(xiě)WHERE條件,會(huì)導(dǎo)致整張表的數(shù)據(jù)被修改,造成不可逆的損失,一定要格外謹(jǐn)慎!

1. 基本語(yǔ)法(必記)

-- 基本語(yǔ)法:UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 條件;
-- 核心:WHERE條件用于指定要修改的記錄,缺一不可!

2. 基礎(chǔ)示例

修改student表中“張三”的年齡和專業(yè),明確指定WHERE條件,確保只修改目標(biāo)記錄:

-- 修改張三的年齡為22,專業(yè)改為大數(shù)據(jù)技術(shù)
UPDATE student
SET age = 22, major = '大數(shù)據(jù)技術(shù)'
WHERE name = '張三';
-- 驗(yàn)證修改結(jié)果
SELECT name, age, major FROM student WHERE name = '張三';

3. 增加條件過(guò)濾(多條件修改)

實(shí)際開(kāi)發(fā)中,常常需要根據(jù)多個(gè)條件篩選要修改的記錄,可使用AND、OR等邏輯運(yùn)算符拼接條件:

-- 修改年齡大于20且專業(yè)為計(jì)算機(jī)科學(xué)的學(xué)生,將專業(yè)改為人工智能
UPDATE student
SET major = '人工智能'
WHERE age > 20 AND major = '計(jì)算機(jī)科學(xué)';
-- 說(shuō)明:AND表示“同時(shí)滿足兩個(gè)條件”,OR表示“滿足任意一個(gè)條件”

4. 新手必踩坑點(diǎn)(重點(diǎn)警告)

?? 絕對(duì)禁止:在沒(méi)有WHERE條件的情況下執(zhí)行UPDATE語(yǔ)句!會(huì)修改表中所有記錄,比如下面這句:

-- 錯(cuò)誤示例:沒(méi)有WHERE條件,會(huì)將所有學(xué)生的年齡改為20
UPDATE student SET age = 20;
-- 后果:整張表的age字段全部被修改,無(wú)法撤銷(除非有備份或事務(wù)回滾)

? 建議:執(zhí)行UPDATE語(yǔ)句前,先執(zhí)行對(duì)應(yīng)的SELECT語(yǔ)句,驗(yàn)證篩選的記錄是否正確,再執(zhí)行UPDATE,比如:

-- 先驗(yàn)證:查詢年齡大于20且專業(yè)為計(jì)算機(jī)科學(xué)的學(xué)生
SELECT * FROM student WHERE age > 20 AND major = '計(jì)算機(jī)科學(xué)';
-- 確認(rèn)記錄正確后,再執(zhí)行UPDATE語(yǔ)句
UPDATE student SET major = '人工智能' WHERE age > 20 AND major = '計(jì)算機(jī)科學(xué)';

四、DELETE:刪除數(shù)據(jù)(移除記錄)

DELETE語(yǔ)句用于刪除表中已存在的記錄,與UPDATE類似,忘記寫(xiě)WHERE條件會(huì)刪除表中所有數(shù)據(jù),且刪除后的數(shù)據(jù)若未備份,很難恢復(fù),一定要謹(jǐn)慎操作。

1. 基本語(yǔ)法

-- 基本語(yǔ)法:DELETE FROM 表名 WHERE 條件;
-- 核心:WHERE條件用于指定要?jiǎng)h除的記錄,不可省略(除非確實(shí)要?jiǎng)h除所有數(shù)據(jù))

2. 基礎(chǔ)示例

刪除student表中id為3的學(xué)生記錄(精準(zhǔn)刪除,風(fēng)險(xiǎn)最低):

-- 刪除student表中所有數(shù)據(jù)(表結(jié)構(gòu)保留)
DELETE FROM student;
-- 注意:刪除后,表結(jié)構(gòu)仍然存在,可重新插入數(shù)據(jù)

3. 刪除所有數(shù)據(jù)(謹(jǐn)慎使用)

如果確實(shí)需要?jiǎng)h除表中所有數(shù)據(jù),可省略WHERE條件,但一定要確認(rèn)無(wú)誤后再執(zhí)行:

-- 刪除student表中所有數(shù)據(jù)(表結(jié)構(gòu)保留)
DELETE FROM student;
-- 注意:刪除后,表結(jié)構(gòu)仍然存在,可重新插入數(shù)據(jù)

4. 對(duì)比TRUNCATE(與DDL的區(qū)別)

上一章我們學(xué)習(xí)了TRUNCATE語(yǔ)句,它也能清空表數(shù)據(jù),很多新手會(huì)把它和DELETE混淆,這里用表格明確兩者的區(qū)別,面試???,一定要記牢:

對(duì)比維度

DELETE(DML語(yǔ)句)

TRUNCATE(DDL語(yǔ)句)

所屬類別

DML(數(shù)據(jù)操作語(yǔ)言)

DDL(數(shù)據(jù)定義語(yǔ)言)

執(zhí)行速度

較慢(逐行刪除,記錄日志,可回滾)

非??欤ㄖ苯忧蹇毡頂?shù)據(jù),不記錄日志)

是否可回滾

? 可回滾(事務(wù)內(nèi)執(zhí)行時(shí),未提交可撤銷)

? 不可回滾(執(zhí)行即生效,自動(dòng)提交事務(wù))

是否重置自增

? 不重置(刪除后,自增主鍵繼續(xù)從之前的最大值遞增)

? 重置(清空后,自增主鍵重新從1開(kāi)始)

? 總結(jié):日常開(kāi)發(fā)中,若需要清空數(shù)據(jù)且可能需要回滾,用DELETE;若確定不需要回滾、追求效率,用TRUNCATE(但要格外謹(jǐn)慎)。

五、SELECT:查詢數(shù)據(jù)(檢索記錄)

SELECT語(yǔ)句是MySQL中使用頻率最高的語(yǔ)句,沒(méi)有之一。它的功能非常靈活,可實(shí)現(xiàn)簡(jiǎn)單的全表查詢,也能實(shí)現(xiàn)復(fù)雜的條件篩選、排序、分頁(yè)、分組統(tǒng)計(jì)等操作。下面我們從基礎(chǔ)到進(jìn)階,逐步掌握SELECT的核心用法。

1. 基本語(yǔ)法(通用模板)

SELECT語(yǔ)句的語(yǔ)法可靈活組合,核心模板如下,后續(xù)所有用法都是基于這個(gè)模板擴(kuò)展:

-- 基本語(yǔ)法模板
SELECT 列1, 列2, ...  -- 要查詢的列(*表示查詢所有列)
FROM 表名             -- 要查詢的表
WHERE 條件            -- 篩選條件(可選)
ORDER BY 排序列       -- 排序(可選,ASC升序,DESC降序)
LIMIT 限制條數(shù);       -- 限制查詢結(jié)果條數(shù)(可選,用于分頁(yè))

2. 基礎(chǔ)示例(簡(jiǎn)單查詢)

最常用的兩種簡(jiǎn)單查詢,適合快速檢索數(shù)據(jù):

-- 1. 查詢指定列:查詢所有學(xué)生的姓名和年齡(只返回需要的列,提升效率)
SELECT name, age FROM student;
-- 2. 查詢所有列:查詢所有學(xué)生的全部信息(*表示所有列,不推薦在生產(chǎn)環(huán)境使用)
SELECT * FROM student;

? 建議:生產(chǎn)環(huán)境中,盡量不要用*查詢所有列,只查詢需要的列,可減少數(shù)據(jù)傳輸量,提升查詢效率。

3. 條件過(guò)濾(WHERE子句)

通過(guò)WHERE子句篩選符合條件的記錄,常用的條件運(yùn)算符有:>(大于)、<(小于)、=(等于)、>=(大于等于)、<=(小于等于)、<>(不等于),以及AND、OR邏輯運(yùn)算符:

-- 示例1:查詢年齡大于20的學(xué)生
SELECT * FROM student WHERE age > 20;
-- 示例2:查詢年齡大于等于20且專業(yè)為人工智能的學(xué)生
SELECT * FROM student WHERE age >= 20 AND major = '人工智能';
-- 示例3:查詢年齡小于19或?qū)I(yè)為軟件工程的學(xué)生
SELECT * FROM student WHERE age < 19 OR major = '軟件工程';

4. 模糊查詢(LIKE子句)

當(dāng)不知道具體的查詢值,只知道部分內(nèi)容時(shí),可用LIKE進(jìn)行模糊查詢,常用通配符:%(表示任意長(zhǎng)度的字符序列,包括0個(gè)字符)、_(表示單個(gè)字符):

-- 示例1:查詢姓名以“張”開(kāi)頭的學(xué)生(%匹配“張”后面的任意字符)
SELECT * FROM student WHERE name LIKE '張%';
-- 示例2:查詢姓名包含“李”字的學(xué)生(%匹配“李”前后的任意字符)
SELECT * FROM student WHERE name LIKE '%李%';
-- 示例3:查詢姓名第二個(gè)字是“四”的學(xué)生(_匹配單個(gè)字符)
SELECT * FROM student WHERE name LIKE '_四%';

5. 排序(ORDER BY子句)

查詢結(jié)果默認(rèn)是無(wú)序的,可通過(guò)ORDER BY子句對(duì)結(jié)果進(jìn)行排序,ASC表示升序(默認(rèn),可省略),DESC表示降序:

-- 示例1:按年齡升序排序(從大到小,默認(rèn)ASC,可省略)
SELECT * FROM student ORDER BY age;
-- 等價(jià)于:SELECT * FROM student ORDER BY age ASC;
-- 示例2:按年齡降序排序(從小到大)
SELECT * FROM student ORDER BY age DESC;
-- 示例3:多列排序:先按專業(yè)升序,再按年齡降序
SELECT * FROM student ORDER BY major ASC, age DESC;

6. 限制條數(shù)(LIMIT子句,分頁(yè)查詢)

當(dāng)查詢結(jié)果較多時(shí),可用LIMIT限制返回的條數(shù),常用于分頁(yè)查詢(比如每頁(yè)顯示5條數(shù)據(jù)),語(yǔ)法有兩種:

-- 語(yǔ)法1:LIMIT 條數(shù)(返回前N條記錄)
SELECT * FROM student LIMIT 5;  -- 返回前5條學(xué)生記錄
-- 語(yǔ)法2:LIMIT 偏移量, 條數(shù)(從第N+1條開(kāi)始,返回M條記錄)
SELECT * FROM student LIMIT 5, 5;  -- 從第6條開(kāi)始,返回5條(第6-10條)
-- 分頁(yè)場(chǎng)景示例:第1頁(yè)(1-5條)、第2頁(yè)(6-10條)、第3頁(yè)(11-15條)
-- 第1頁(yè):LIMIT 0, 5(偏移量0,返回5條)
-- 第2頁(yè):LIMIT 5, 5(偏移量5,返回5條)
-- 第3頁(yè):LIMIT 10, 5(偏移量10,返回5條)

7. 聚合函數(shù)(統(tǒng)計(jì)查詢)

聚合函數(shù)用于對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,常用的聚合函數(shù)有:COUNT(統(tǒng)計(jì)條數(shù))、AVG(求平均值)、SUM(求和)、MAX(求最大值)、MIN(求最小值),通常與AS配合使用,給統(tǒng)計(jì)結(jié)果起別名:

-- 示例1:統(tǒng)計(jì)學(xué)生總?cè)藬?shù)(COUNT(*) 統(tǒng)計(jì)所有記錄,包括NULL值)
SELECT COUNT(*) AS 總?cè)藬?shù) FROM student;
-- 示例2:統(tǒng)計(jì)學(xué)生的平均年齡(AVG(列名) 求指定列的平均值)
SELECT AVG(age) AS 平均年齡 FROM student;
-- 示例3:統(tǒng)計(jì)學(xué)生的最大年齡和最小年齡
SELECT MAX(age) AS 最大年齡, MIN(age) AS 最小年齡 FROM student;
-- 示例4:統(tǒng)計(jì)某專業(yè)的學(xué)生總?cè)藬?shù)
SELECT COUNT(*) AS 計(jì)算機(jī)專業(yè)人數(shù) FROM student WHERE major = '計(jì)算機(jī)科學(xué)';

8. 分組查詢(GROUP BY + HAVING)

當(dāng)需要按某個(gè)字段分組統(tǒng)計(jì)時(shí),可用GROUP BY子句,搭配HAVING子句過(guò)濾分組后的結(jié)果(注意:HAVING用于過(guò)濾分組,WHERE用于過(guò)濾行):

-- 示例:按專業(yè)分組,統(tǒng)計(jì)每個(gè)專業(yè)的學(xué)生人數(shù),且只顯示人數(shù)大于2的專業(yè)
SELECT major, COUNT(*) AS 人數(shù)
FROM student
GROUP BY major  -- 按major字段分組
HAVING 人數(shù) > 2;  -- 過(guò)濾分組結(jié)果,只保留人數(shù)>2的專業(yè)
-- 注意:WHERE和HAVING的區(qū)別:
-- WHERE:分組前過(guò)濾行(比如先過(guò)濾年齡>20的學(xué)生,再分組)
-- HAVING:分組后過(guò)濾分組(比如先分組,再過(guò)濾人數(shù)>2的分組)

六、DML操作與事務(wù)(Transaction)

在Java后端開(kāi)發(fā)中,事務(wù)控制是非常關(guān)鍵的知識(shí)點(diǎn),尤其是DML語(yǔ)句(INSERT、UPDATE、DELETE)會(huì)改變數(shù)據(jù),必須通過(guò)事務(wù)保證數(shù)據(jù)的一致性(比如轉(zhuǎn)賬操作,扣款和到賬必須同時(shí)成功或同時(shí)失?。?/p>

核心原則:DML語(yǔ)句執(zhí)行后,不會(huì)自動(dòng)提交事務(wù),需手動(dòng)執(zhí)行COMMIT提交;若執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤,可執(zhí)行ROLLBACK回滾,撤銷所有未提交的修改。

1. 開(kāi)啟與提交事務(wù)(基礎(chǔ)用法)

通過(guò)START TRANSACTION開(kāi)啟事務(wù),執(zhí)行完所有DML操作后,用COMMIT提交事務(wù),事務(wù)提交后,修改會(huì)永久生效:

-- 示例:模擬轉(zhuǎn)賬操作(id=1的賬戶扣款100,id=2的賬戶到賬100)
START TRANSACTION;  -- 開(kāi)啟事務(wù)
UPDATE account SET balance = balance - 100 WHERE id = 1;  -- 扣款
UPDATE account SET balance = balance + 100 WHERE id = 2;  -- 到賬
COMMIT;  -- 提交事務(wù),所有修改永久生效

2. 回滾事務(wù)(撤銷修改)

若執(zhí)行DML操作后發(fā)現(xiàn)錯(cuò)誤,在未提交事務(wù)前,可執(zhí)行ROLLBACK回滾,撤銷所有未提交的修改,數(shù)據(jù)恢復(fù)到事務(wù)開(kāi)啟前的狀態(tài):

START TRANSACTION;
UPDATE account SET balance = balance - 100 WHERE id = 1;
-- 假設(shè)這里出現(xiàn)錯(cuò)誤(比如id=2不存在),執(zhí)行回滾
ROLLBACK;  -- 撤銷扣款操作,id=1的賬戶余額恢復(fù)原樣

3. 與Java結(jié)合(實(shí)戰(zhàn)場(chǎng)景)

實(shí)際Java后端開(kāi)發(fā)中,很少直接手動(dòng)執(zhí)行事務(wù)相關(guān)的SQL語(yǔ)句,通常通過(guò)Spring框架的@Transactional注解控制事務(wù),簡(jiǎn)化開(kāi)發(fā):

import org.springframework.transaction.annotation.Transactional;
// 轉(zhuǎn)賬服務(wù)類
public class TransferService {
    // 注入賬戶Mapper(用于操作數(shù)據(jù)庫(kù))
    private AccountMapper accountMapper;
    // @Transactional注解:開(kāi)啟事務(wù),方法內(nèi)所有DML操作要么同時(shí)成功,要么同時(shí)失敗
    @Transactional
    public void transfer(int fromId, int toId, int amount) {
        // 扣款:從fromId賬戶減去amount
        accountMapper.decreaseBalance(fromId, amount);
        // 到賬:給toId賬戶增加amount
        accountMapper.increaseBalance(toId, amount);
    }
}
// 說(shuō)明:如果方法執(zhí)行過(guò)程中出現(xiàn)異常(比如SQL錯(cuò)誤、業(yè)務(wù)異常),Spring會(huì)自動(dòng)執(zhí)行ROLLBACK
// 如果方法正常執(zhí)行完畢,Spring會(huì)自動(dòng)執(zhí)行COMMIT

七、DML語(yǔ)句的執(zhí)行順序(面試常問(wèn))

很多新手會(huì)疑惑:SQL語(yǔ)句的書(shū)寫(xiě)順序和執(zhí)行順序不一樣,為什么?其實(shí)SQL是聲明式語(yǔ)言,我們只需要告訴MySQL“要查什么”,MySQL會(huì)按照內(nèi)部邏輯順序執(zhí)行,這個(gè)順序也是面試高頻考點(diǎn),一定要記牢:

-- 書(shū)寫(xiě)順序(我們寫(xiě)SQL的順序)
SELECT 列名 FROM 表名 WHERE 條件 GROUP BY 列名 HAVING 條件 ORDER BY 列名 LIMIT 條數(shù);
-- 執(zhí)行順序(MySQL內(nèi)部實(shí)際執(zhí)行順序)
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

? 簡(jiǎn)單理解:先找到要查詢的表(FROM),再篩選符合條件的行(WHERE),然后分組(GROUP BY),過(guò)濾分組結(jié)果(HAVING),再選擇要返回的列(SELECT),接著排序(ORDER BY),最后限制返回條數(shù)(LIMIT)。

? 本章總結(jié)(新手必背)

本章我們掌握了DML語(yǔ)句的核心用法,重點(diǎn)記住“增、刪、改、查”四大操作,以及事務(wù)控制和執(zhí)行順序,用表格快速回顧核心要點(diǎn):

操作類型

核心SQL語(yǔ)句

關(guān)鍵注意點(diǎn)

插入

INSERT INTO ... VALUES ...

列和值的順序、類型要匹配,推薦指定列名

更新

UPDATE ... SET ... WHERE ...

必寫(xiě)WHERE條件,避免修改整張表

刪除

DELETE FROM ... WHERE ...

謹(jǐn)慎省略WHERE,刪除前建議先查詢驗(yàn)證

查詢

SELECT ... FROM ...

支持條件、分組、排序、分頁(yè),避免用*查詢所有列

事務(wù)

START TRANSACTION / COMMIT / ROLLBACK

保證DML操作的一致性,未提交可回滾

最后提醒:DML語(yǔ)句是日常開(kāi)發(fā)的核心,建議大家多敲代碼練習(xí),尤其是SELECT語(yǔ)句的復(fù)雜用法(分組、聚合、分頁(yè)),以及事務(wù)的控制,這些都是面試和工作中的重點(diǎn)。下一章我們將學(xué)習(xí)DCL語(yǔ)句,掌握數(shù)據(jù)庫(kù)的權(quán)限管理,繼續(xù)加油!

到此這篇關(guān)于MySQL DML語(yǔ)句定義及常見(jiàn)用法實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)mysql dml用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL文件權(quán)限存在的安全問(wèn)題和解決方案

    MySQL文件權(quán)限存在的安全問(wèn)題和解決方案

    MySQL文件權(quán)限是用來(lái)控制用戶對(duì)數(shù)據(jù)庫(kù)文件以及目錄的操作權(quán)限,在MySQL中,這些權(quán)限通常由系統(tǒng)管理員分配,通過(guò)GRANT和REVOKE語(yǔ)句進(jìn)行管理,本文給大家介紹了MySQL文件權(quán)限存在的安全問(wèn)題和解決方案,需要的朋友可以參考下
    2024-07-07
  • mysql 設(shè)置默認(rèn)的時(shí)間值

    mysql 設(shè)置默認(rèn)的時(shí)間值

    由于MySQL目前字段的默認(rèn)值不支持函數(shù)
    2009-05-05
  • MySQL中的批量修改、插入操作數(shù)據(jù)庫(kù)

    MySQL中的批量修改、插入操作數(shù)據(jù)庫(kù)

    在平常的項(xiàng)目中,我們會(huì)需要批量操作數(shù)據(jù)庫(kù)的時(shí)候,例如:批量修改,批量插入,那我們不應(yīng)該使用 for 循環(huán)去操作數(shù)據(jù)庫(kù),這樣會(huì)導(dǎo)致我們反復(fù)與數(shù)據(jù)庫(kù)發(fā)生連接和斷開(kāi)連接,影響性能和增加操作時(shí)間,所以可以使用SQL 批量修改的方式去操作數(shù)據(jù)庫(kù),感興趣的朋友一起學(xué)習(xí)下吧
    2023-09-09
  • MySQL數(shù)據(jù)庫(kù)安裝方法與圖形化管理工具介紹

    MySQL數(shù)據(jù)庫(kù)安裝方法與圖形化管理工具介紹

    這篇文章介紹了MySQL數(shù)據(jù)庫(kù)安裝方法與圖形化管理工具,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 查看當(dāng)前mysql使用頻繁的sql語(yǔ)句(詳解)

    查看當(dāng)前mysql使用頻繁的sql語(yǔ)句(詳解)

    下面小編就為大家?guī)?lái)一篇查看當(dāng)前mysql使用頻繁的sql語(yǔ)句(詳解)。小編覺(jué)的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • 淺談一下mysql數(shù)據(jù)庫(kù)底層原理

    淺談一下mysql數(shù)據(jù)庫(kù)底層原理

    這篇文章主要介紹了淺談一下mysql數(shù)據(jù)庫(kù)底層原理,介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)問(wèn)題的解決

    MYSQL ERROR 1045 (28000): Access denied for user (using pass

    Mysql中添加用戶之后可能出現(xiàn)登錄時(shí)提示ERROR 1045 (28000): Access denied for user的錯(cuò)誤.
    2009-07-07
  • MYSQL字符串強(qiáng)轉(zhuǎn)的方法示例

    MYSQL字符串強(qiáng)轉(zhuǎn)的方法示例

    這篇文章主要給大家介紹了關(guān)于MYSQL字符串強(qiáng)轉(zhuǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Mysql 設(shè)置boolean類型的操作

    Mysql 設(shè)置boolean類型的操作

    這篇文章主要介紹了Mysql 設(shè)置boolean類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • mysql中null(IFNULL,COALESCE和NULLIF)相關(guān)知識(shí)點(diǎn)總結(jié)

    mysql中null(IFNULL,COALESCE和NULLIF)相關(guān)知識(shí)點(diǎn)總結(jié)

    這篇文章主要介紹了mysql中null(IFNULL,COALESCE和NULLIF)相關(guān)知識(shí)點(diǎn),結(jié)合實(shí)例形式總結(jié)分析了mysql中關(guān)于null的判斷、使用相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-12-12

最新評(píng)論

松溪县| 民县| 江达县| 阜阳市| 开封市| 邯郸市| 北流市| 襄城县| 余庆县| 昭苏县| 铁岭市| 长岭县| 汉源县| 琼结县| 财经| 望都县| 安达市| 辽中县| 兴化市| 奎屯市| 乐亭县| 遵义市| 池州市| 林口县| 万年县| 潍坊市| 延长县| 广德县| 钟山县| 乾安县| 浠水县| 大连市| 达尔| 靖江市| 长宁县| 怀来县| 邵阳县| 辽中县| 兴城市| 西吉县| 改则县|