MySQL基本查詢與數據操作全面解析

目錄

1. CRUD操作概述

2. Create操作詳解

2.1 表的創建

2.2 單行數據插入

2.3 多行數據插入

2.4 插入沖突處理

3. Retrieve操作詳解

3.1 基礎查詢

全列查詢(慎用)

指定列查詢

表達式查詢

結果去重

3.2 條件查詢(WHERE子句)

比較運算符

邏輯運算符

NULL處理

3.3 結果排序(ORDER BY)

3.4 分頁查詢(LIMIT與OFFSET)

4. Update操作詳解

4.1 單字段更新

4.2 多字段更新

4.3 基于表達式更新

5. Delete操作詳解

5.1 刪除指定數據

5.2 清空表數據

6. 高級查詢技巧

6.1 聚合函數

6.2 GROUP BY與HAVING

7. 實戰案例解析

案例1:去重插入

案例2:分頁查詢

8. 總結與最佳實踐


1. CRUD操作概述

CRUD是數據庫操作的四大核心功能:

  • Create(創建):插入數據

  • Retrieve(讀取):查詢數據

  • Update(更新):修改數據

  • Delete(刪除):刪除數據

本文將通過豐富的代碼示例,詳細解析MySQL中CRUD的實現方式及注意事項。


2. Create操作詳解

2.1 表的創建

通過CREATE TABLE語句定義表結構。

CREATE TABLE students (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,sn INT NOT NULL UNIQUE COMMENT '學號',name VARCHAR(20) NOT NULL,qq VARCHAR(20)
);
  • 字段說明

    • id:主鍵,自增,無符號整數。

    • sn:唯一學號,不可為空。

    • name:姓名,長度限制為20字符。

    • qq:QQ號,可為空。

2.2 單行數據插入

全列插入時,需按表定義的列順序提供所有值:

INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
  • 注意事項

    • 若省略自增主鍵(如id),MySQL會自動填充。

    • 必須保證值的順序與表結構完全一致。

2.3 多行數據插入

指定列插入,適用于部分字段賦值:

INSERT INTO students (id, sn, name) VALUES(102, 20001, '曹孟德'),(103, 20002, '孫仲謀');
  • 優勢:批量插入提升效率,減少數據庫連接開銷。

2.4 插入沖突處理

當主鍵或唯一鍵沖突時,使用ON DUPLICATE KEY UPDATE進行更新:

INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大師')ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大師';
  • 返回值說明

    • 0 rows affected:沖突數據與更新值相同。

    • 1 row affected:插入新數據。

    • 2 rows affected:更新沖突數據。

或使用REPLACE直接替換沖突記錄:

REPLACE INTO students (sn, name) VALUES (20001, '曹阿晴');
  • 注意REPLACE會刪除原記錄后插入新數據,可能導致自增ID不連續。


3. Retrieve操作詳解

3.1 基礎查詢

全列查詢(慎用)
SELECT * FROM exam_result;
  • 缺點:傳輸數據量大,可能影響索引性能。

指定列查詢
SELECT id, name, english FROM exam_result;
表達式查詢

計算總分并指定別名:

SELECT name, chinese + math + english AS 總分 FROM exam_result;
結果去重
SELECT DISTINCT math FROM exam_result;

3.2 條件查詢(WHERE子句)

比較運算符
-- 英語不及格的同學
SELECT name, english FROM exam_result WHERE english < 60;-- 語文成績在80到90分之間
SELECT name, chinese FROM exam_result 
WHERE chinese BETWEEN 80 AND 90;
邏輯運算符
-- 姓孫且不叫孫某的同學
SELECT name FROM exam_result 
WHERE name LIKE '孫%' AND name NOT LIKE '孫_';
NULL處理
-- 查詢QQ號已知的同學
SELECT name, qq FROM students WHERE qq IS NOT NULL;

3.3 結果排序(ORDER BY)

-- 按數學成績降序,英語成績升序
SELECT name, math, english FROM exam_result 
ORDER BY math DESC, english ASC;

3.4 分頁查詢(LIMIT與OFFSET)

-- 每頁3條數據,查詢第2頁
SELECT * FROM exam_result 
ORDER BY id LIMIT 3 OFFSET 3;
  • 注意OFFSET起始位置從0開始。


4. Update操作詳解

4.1 單字段更新

UPDATE exam_result SET math = 80 WHERE name = '孫悟空';

4.2 多字段更新

UPDATE exam_result SET math = 60, chinese = 70 
WHERE name = '曹孟德';

4.3 基于表達式更新

-- 總成績倒數前三的數學成績加30分
UPDATE exam_result SET math = math + 30 
ORDER BY chinese + math + english LIMIT 3;

5. Delete操作詳解

5.1 刪除指定數據

DELETE FROM exam_result WHERE name = '孫悟空';

5.2 清空表數據

  • DELETE:逐行刪除,可回滾,保留自增計數。

    DELETE FROM for_delete;

  • TRUNCATE:直接清空表,不可回滾,重置自增ID。

    TRUNCATE TABLE for_truncate;

6. 高級查詢技巧

6.1 聚合函數

-- 統計數學成績總分
SELECT SUM(math) FROM exam_result;-- 計算平均總分
SELECT AVG(chinese + math + english) AS 平均總分 FROM exam_result;

6.2 GROUP BY與HAVING

-- 按部門統計平均工資
SELECT deptno, AVG(sal) FROM EMP GROUP BY deptno;-- 篩選平均工資低于2000的部門
SELECT deptno, AVG(sal) AS avg_sal FROM EMP 
GROUP BY deptno HAVING avg_sal < 2000;

7. 實戰案例解析

案例1:去重插入

-- 創建臨時表并插入去重數據
CREATE TABLE no_duplicate_table LIKE duplicate_table;
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;
RENAME TABLE duplicate_table TO old_duplicate_table, no_duplicate_table TO duplicate_table;

案例2:分頁查詢

-- 按ID分頁,每頁3條
SELECT * FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;

8. 總結與最佳實踐

  1. 避免全列查詢:減少數據傳輸量,提升性能。

  2. 謹慎使用UPDATE/DELETE:操作前備份數據,或添加LIMIT限制。

  3. 合理使用索引:WHERE和ORDER BY字段建立索引可加速查詢。

  4. 事務管理:批量操作時開啟事務,確保數據一致性。

通過本文的系統學習,讀者可掌握MySQL核心操作,應對日常開發中的各類數據管理需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77931.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

01.Python代碼Pandas是什么?pandas的簡介

01.Python代碼Pandas是什么&#xff1f;pandas的簡介 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是pandas的使用語法。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性&#xff0c;希望對您有用~ pyth…

(8)ECMAScript語法詳解

本系列教程目錄&#xff1a;Vue3Element Plus全套學習筆記-目錄大綱 文章目錄 第2章 ECMAScript2.1 ECMAScript 的發展歷史2.2 什么是ES62.3 ES6語法新特性2.3.1 變量聲明let2.3.2 常量聲明2.3.3 模板字符串2.3.4 函數默認參數2.3.5 箭頭函數2.3.6 對象初始化簡寫2.3.7 解構2.3…

Android JNI開發中頭文件引入的常見問題與解決方案?,提示:file not found

Android JNI開發中頭文件引入的常見問題與解決方案 問題場景&#xff08;新手易犯錯誤&#xff09; 假設你在開發一個JNI項目&#xff0c;想要實現一個線程安全的隊列&#xff08;SafeQueue&#xff09;&#xff0c;于是直接在cpp目錄下創建了safe_queue.h文件&#xff0c;并開…

C++靜態與動態聯編區別解析

在 C++ 中,靜態聯編(Static Binding)和動態聯編(Dynamic Binding)是兩種不同的函數調用綁定機制,核心區別在于確定函數調用的時機和多態性的支持。以下是詳細解釋: 1. 靜態聯編(Static Binding) 定義:在編譯階段確定函數調用與具體實現的關系。特點: 由編譯器直接確…

如何批量為多個 Word 文檔添加水印保護

在日常辦公中&#xff0c;Word文檔添加水印是一項重要的操作&#xff0c;特別是在需要保護文件內容的安全性和版權時。雖然Office自帶了添加水印的功能&#xff0c;但當需要一次性給多個Word文檔添加水印時&#xff0c;手動操作顯得非常繁瑣且低效。為了提高效率&#xff0c;可…

【愚公系列】《Python網絡爬蟲從入門到精通》057-分布式爬取中文日報新聞數據

&#x1f31f;【技術大咖愚公搬代碼&#xff1a;全棧專家的成長之路&#xff0c;你關注的寶藏博主在這里&#xff01;】&#x1f31f; &#x1f4e3;開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主&#xff01; &#x1f…

Linux系統編程 day9 SIGCHLD and 線程

SIGCHLD信號 只要子進程信號發生改變&#xff0c;就會產生SIGCHLD信號。 借助SIGCHLD信號回收子進程 回收子進程只跟父進程有關。如果不使用循環回收多個子進程&#xff0c;會產生多個僵尸進程&#xff0c;原因是因為這個信號不會循環等待。 #include<stdio.h> #incl…

微信小程序拖拽排序有效果圖

效果圖 .wxml <view class"container" style"--w:{{w}}px;" wx:if"{{location.length}}"><view class"container-item" wx:for"{{list}}" wx:key"index" data-index"{{index}}"style"--…

hadoop三大組件的結構及各自的作用

1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系統&#xff0c;用于存儲和管理海量數據。它具有高容錯性、高吞吐量和可擴展性&#xff0c;能夠在多個節點上存儲和管理大規模數據 1.2架構&#xff1a;采用主從架構&#xff0c;由一個 NameNode 和多個 DataNode 組成。NameNode…

解決jupyter notebook修改路徑下沒有c.NotebookApp.notebook_dir【建議收藏】

文章目錄 一、檢查并解決問題二、重新設置默認路徑創作不易&#xff0c;感謝未來首富們的支持與關注&#xff01; 最近在用jupyter notebook編寫代碼時&#xff0c;更新了一下Scikit-learn的版本&#xff0c;然后重新打開jupyter notebook的時候&#xff0c;我傻眼了&#xff0…

MCP Host、MCP Client、MCP Server全流程實戰

目錄 準備工作 MCP Server 實現 調試工作 MCP Client 實現 MCP Host 配置 第一步:配置支持 function calling的 LLM 第二步:添加MCP Server 一般有兩種方式,第一種json配置,第二種直接是Command形式,我這里采用Command形式 第三步:使用MCP Server 準備工作 安裝…

4.21—4.22學習總結 JavaWeb:HTML-CSS

Web&#xff1a;能夠通過瀏覽器訪問到的網站。 Web標準&#xff1a; HTML&#xff1a; vscode中進行注釋的快捷鍵為ctrl斜線/ h1的字體最大&#xff0c;依次遞減&#xff0c;只存在h1—h6。 超鏈接&#xff1a; 設置字體顏色&#xff1a; 方式三寫一個css文件&#xff0c;將方…

Kaamel Agent: 基于EU AI Act的AI影響評估(AIIA)

1. 引言&#xff1a;安全視角下的AI監管 隨著人工智能技術的快速發展和廣泛應用&#xff0c;AI系統在為社會帶來創新和效率的同時&#xff0c;也引發了諸多關于安全、隱私和合規的擔憂。在這一背景下&#xff0c;全球范圍內涌現出多種監管框架和標準&#xff0c;旨在確保AI系統…

Mongodb分布式文件存儲數據庫

文章目錄 一、MongoDB 簡介基本信息特點內部組件 二、MongoDB 部署1. 安裝依賴2. 解壓部署并配置環境變量3. 修改配置文件以及啟動服務4.數據庫權限管理 三、MongoDB 管理1. 角色權限2. 操作命令用戶管理命令常用命令&#xff08;Mongo4.2.8&#xff09;數據庫相關用戶相關集合…

麒麟V10安裝MySQL8.4

1、下載安裝包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解壓 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安裝MySQL 3.1、卸載mariadb rpm -qa | grep mariadb rpm -e m…

Unreal如何使用后處理材質實現一個黑屏漸變效果

文章目錄 前言相機后期處理材質創建材質相機設置動態修改FadeAlpha參數使用示例最后前言 UE5 開發VR ,如何通過PostProcess輕松實現黑屏漸變效果 最簡單的辦法,其實是使用一個半球形模型,遮擋住相機,然后控制這個半球形遮罩的顏色透明度,至少Unity中默認的Tunneling是這么…

其它生成式(對比列表生成式)

一、字典生成式&#xff1a; # keys[name, age, gender] # dic{key:None for key in keys} # print(dic) items[(name, Tom), (age, 18), (gender, male)] res{k:v for k,v in items if k ! gender} print(res) 二、集合生成式&#xff1a; keys[name, age, gender] set1{ke…

健身房管理系統(springboot+ssm+vue+mysql)含運行文檔

健身房管理系統(springbootssmvuemysql)含運行文檔 健身房管理系統是一個全面的解決方案&#xff0c;旨在幫助健身房高效管理其運營。系統提供多種功能模塊&#xff0c;包括會員管理、員工管理、會員卡管理、教練信息管理、解聘管理、健身項目管理、指導項目管理、健身器材管理…

LeetCode 第 262 題全解析:從 SQL 到 Swift 的數據分析實戰

文章目錄 摘要描述題解答案&#xff08;SQL&#xff09;Swift 題解代碼分析代碼示例&#xff08;可運行 Demo&#xff09;示例測試及結果時間復雜度分析空間復雜度分析總結未來展望 摘要 在實際業務中&#xff0c;打車平臺要監控行程的取消率&#xff0c;及時識別服務質量的問…

三生原理與現有密碼學的核心區別?

AI輔助創作&#xff1a; 三生原理與現有密碼學的核心區別 一、?哲學基礎與設計邏輯? ?動態生成 vs 靜態分析? 三生原理以“陰陽動態平衡”為核心&#xff0c;通過參數化生成&#xff08;如素數構造中的陰陽元聯動公式&#xff09;模擬系統演化過程&#xff0c;而現有密碼…