以mysql 為例,增刪改查語法及其他高級特性

以下是 MySQL增刪改查語法高級特性的詳細整理,結合示例說明:


1. 基礎操作(CRUD)

(1) 創建數據(INSERT)

-- 單條插入
INSERT INTO users (id, name, email) 
VALUES (1, 'Alice', 'alice@example.com');-- 多條插入
INSERT INTO users (id, name, email) 
VALUES (2, 'Bob', 'bob@example.com'),(3, 'Charlie', 'charlie@example.com');

(2) 查詢數據(SELECT)

-- 基礎查詢
SELECT name, email FROM users 
WHERE age > 25 
ORDER BY created_at DESC 
LIMIT 10;-- 連接查詢(JOIN)
SELECT o.order_id, u.name, o.total 
FROM orders o 
JOIN users u ON o.user_id = u.id 
WHERE o.status = 'completed';

(3) 更新數據(UPDATE)

UPDATE users 
SET email = 'new_email@example.com', updated_at = NOW() 
WHERE id = 1;

(4) 刪除數據(DELETE)

DELETE FROM orders 
WHERE order_date < '2023-01-01';

2. 高級特性

(1) 事務(Transaction)

-- 顯式事務控制
START TRANSACTION;
INSERT INTO users (name, email) VALUES ('Dave', 'dave@example.com');
UPDATE accounts SET balance = balance - 100 WHERE user_id = 4;
COMMIT; -- 提交或 ROLLBACK 回滾-- 自動提交設置(默認開啟)
SET autocommit = 0; -- 需手動提交

(2) 索引(Index)

-- 創建索引
CREATE INDEX idx_email ON users(email);-- 復合索引
CREATE INDEX idx_name_age ON users(name, age);-- 查看索引
SHOW INDEX FROM users;

(3) 存儲過程(Stored Procedure)

DELIMITER $$
CREATE PROCEDURE GetUsersByAge(IN min_age INT)
BEGINSELECT * FROM users WHERE age >= min_age;
END $$
DELIMITER ;-- 調用存儲過程
CALL GetUsersByAge(30);

(4) 觸發器(Trigger)

CREATE TRIGGER before_user_update 
BEFORE UPDATE ON users 
FOR EACH ROW 
SET NEW.updated_at = NOW();

(5) 視圖(View)

CREATE VIEW user_summary AS 
SELECT id, name, email, COUNT(order_id) AS total_orders 
FROM users 
LEFT JOIN orders ON users.id = orders.user_id 
GROUP BY users.id;

(6) 窗口函數(Window Functions)

-- MySQL 8.0+ 支持
SELECT id, name, salary,AVG(salary) OVER() AS avg_salary, -- 窗口內平均值ROW_NUMBER() OVER(ORDER BY salary DESC) AS rank -- 排名
FROM employees;

(7) 正則表達式(REGEXP)

SELECT * FROM users 
WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$';

(8) JSON 支持

-- 創建 JSON 字段
ALTER TABLE products ADD COLUMN metadata JSON;-- 查詢 JSON 字段
SELECT * FROM products 
WHERE metadata->>'$.category' = 'electronics';

(9) 分區表(Partitioning)

-- 按范圍分區
CREATE TABLE orders (order_id INT PRIMARY KEY,order_date DATE,amount DECIMAL(10,2)
) 
PARTITION BY RANGE (YEAR(order_date)) (PARTITION p0 VALUES LESS THAN (2020),PARTITION p1 VALUES LESS THAN (2023),PARTITION p2 VALUES LESS THAN MAXVALUE
);

(10) 事務隔離級別

-- 查看當前隔離級別
SELECT @@tx_isolation;-- 設置隔離級別(如可重復讀)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

3. 其他實用特性

(1) 子查詢(Subquery)

SELECT name 
FROM users 
WHERE age > (SELECT AVG(age) FROM users);

(2) 聯合查詢(UNION)

SELECT 'active' AS status, COUNT(*) FROM users WHERE active = 1
UNION ALL
SELECT 'inactive', COUNT(*) FROM users WHERE active = 0;

(3) 日期函數

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS today, DATEDIFF(end_date, start_date) AS duration 
FROM events;

(4) 鎖機制

-- 顯式行級鎖(InnoDB)
SELECT * FROM users WHERE id = 1 LOCK IN SHARE MODE;-- 排他鎖
SELECT * FROM users WHERE id = 1 FOR UPDATE;

4. 注意事項

  1. 索引優化
    • 避免過度索引,影響寫入性能。
    • 優先為 WHERE, JOIN, ORDER BY 字段創建索引。
  2. 事務設計
    • 短事務可減少鎖沖突。
    • 根據業務選擇隔離級別(如 READ COMMITTEDREPEATABLE READ)。
  3. JSON 字段
    • 使用 JSON_EXTRACT->> 簡化查詢。
  4. 分區表
    • 適用于大數據量表(如按日期分區)。
    • 需評估分區鍵的合理性。

5. 常見問題示例

(1) 復雜查詢優化

-- 使用 EXPLAIN 分析執行計劃
EXPLAIN SELECT * FROM orders 
WHERE user_id = 100 AND status = 'pending';

(2) 備份與恢復

-- 備份
mysqldump -u root -p mydatabase > backup.sql-- 恢復
mysql -u root -p mydatabase < backup.sql

如需更具體的場景(如高并發設計、主從復制),可進一步說明需求!

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

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

相關文章

Postman最新詳細安裝及使用教程【附安裝包】

一、Postman介紹 ?Postman是一個功能強大的API測試工具&#xff0c;主要用于模擬和測試各種HTTP請求&#xff0c;支持GET、POST、PUT、DELETE等多種請求方法。?通過Postman&#xff0c;用戶可以發送請求并查看返回的響應&#xff0c;檢查響應的內容和狀態&#xff0c;從而驗…

第十三章 : Names in Templates_《C++ Templates》notes

Names in Templates 重難點多選題設計題 重難點 1. 名稱分類與基本概念 知識點&#xff1a; 限定名&#xff08;Qualified Name&#xff09;&#xff1a;使用::或.顯式指定作用域的名稱&#xff08;如std::vector&#xff09;非限定名&#xff08;Unqualified Name&#xff0…

整合vue+Element UI 開發管理系統

1、 安裝 Node.js 和 npm 確保安裝了 Node.js 和 npm。可以通過 Node.js 官網 下載。 2、 創建 Vue 項目 安裝cli npm install -g vue/cli 使用 Vue CLI 創建一個新的 Vue 項目。 vue create admin-system cd admin-system npm run serve 出現這個頁面表示vue創建成功 安…

3. 軸指令(omron 機器自動化控制器)——>MC_Stop

機器自動化控制器——第三章 軸指令 9 MC_Stop變量?輸入變量?輸出變量?輸入輸出變量 功能說明?指令詳情?時序圖?重啟運動指令?多重啟動運動指令?異常 MC_Stop 使軸減速停止。 指令名稱FB/FUN圖形表現ST表現MC_Stop強制停止FBMC_Stop_instance (Axis :《參數》 ,Execu…

C#中修飾符——abstract、virtual

一、多態簡介 在面向對象編程的過程中&#xff0c;多態體現出來的是【一個接口&#xff0c;多個功能】&#xff1b;多態性體現在2個方面&#xff1a; 1、程序運行時&#xff0c;在方法參數、集合或數組等位置&#xff0c;派生類對象可以作為基類的對象處理&#xff1b;這樣該對…

Spring Boot + Spring Integration整合MQTT打造雙向通信客戶端

1. 概述 本文分兩個章節講解MQTT相關的知識&#xff0c;第一部份主要講解MQTT的原理和相關配置&#xff0c;第二個章節主要講和Spring boot的integration相結合代碼的具體實現&#xff0c;如果想快速實現功能&#xff0c;可直接跳過第一章節查看第二章講。 1.1 MQTT搭建 為了…

2025前端面試題記錄

vue項目目錄的執行順序是怎么樣的&#xff1f; 1、package.json   在執行npm run dev時&#xff0c;會在當前目錄尋找package.json文件&#xff0c;此文件包含了項目的名稱版本、項目依賴等相關信息。 2、webpack.config.js(會被vue-cli腳手架隱藏) 3、vue.config.js   對…

專題|Python貝葉斯網絡BN動態推理因果建模:MLE/Bayes、有向無環圖DAG可視化分析呼吸疾病、汽車效能數據2實例合集

原文鏈接&#xff1a;https://tecdat.cn/?p41199 作為數據科學家&#xff0c;我們始終在探索能夠有效處理復雜系統不確定性的建模工具。本專題合集系統性地解構了貝葉斯網絡&#xff08;BN&#xff09;這一概率圖模型在當代數據分析中的創新應用&#xff0c;通過開源工具bnlea…

WX小程序

下載 package com.sky.utils;import com.alibaba.fastjson.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.Cl…

Vulnhub-wordpress通關攻略

姿勢一、后臺修改模板拿WebShell 第一步&#xff1a;進?Vulhub靶場并執?以下命令開啟靶場&#xff1b;在瀏覽器中訪問并安裝好.... 第二步&#xff1a;找到外觀--編輯--404.php&#xff0c;將原內容刪除并修改為一句話木馬&#xff0c;點擊更新--File edited successfully. &…

Spring Boot(十六):攔截器Interceptor

攔截器的簡介 攔截器&#xff08;Interceptor&#xff09;?是Spring框架中的概?念&#xff0c;它同樣適?用于Spring Boot&#xff0c;?因為Spring Boot是基于Spring框架的。攔截器是?一種AOP&#xff08;面向切面編程&#xff09;?的輕量級實現方式&#xff0c;它允許我…

Kotlin v2.1.20 發布,標準庫又有哪些變化?

大家吼哇&#xff01;就在三小時前&#xff0c;Kotlin v2.1.20 發布了&#xff0c;更新的內容也已經在官網上更新&#xff1a;What’s new in Kotlin 2.1.20 。 我粗略地看了一下&#xff0c;下面為大家選出一些我比較感興趣、且你可能也會感興趣的內容。 注意&#xff01;這里…

開源鏈動2+1模式、AI智能名片與S2B2C商城小程序源碼在社交電商渠道拓寬中的協同應用研究

摘要&#xff1a;本文基于"開源鏈動21模式""AI智能名片""S2B2C商城小程序源碼"三大技術要素&#xff0c;探討社交電商時代商家渠道拓寬的創新路徑。通過解析各技術的核心機制與應用場景&#xff0c;結合京東便利店等實際案例&#xff0c;論證其對…

【藍橋杯速成】| 10.回溯切割

前面兩篇內容我們都是在做有關回溯問題的組合應用 今天的題目主題是&#xff1a;回溯法在切割問題的應用 題目一&#xff1a;分割回文串 問題描述 131. 分割回文串 - 力扣&#xff08;LeetCode&#xff09; 給你一個字符串 s&#xff0c;請你將 s 分割成一些 子串&#xff…

【嵌入式硬件】三款DCDC調試筆記

關于開關電源芯片&#xff0c;重點關注輸入電源范圍、輸出電流、最低壓降。 1.MP9943: 以MP9943為例&#xff0c;輸入電壓范圍4-36V&#xff0c;輸出最大電流3A&#xff0c;最低壓降為0.3V 調整FB使正常輸出為5.06V 給定6V空載、5V空載、5V帶2A負載的情況&#xff1a; 6V帶2A…

2025年03月18日柯萊特(外包寧德)一面前端面試

目錄 自我介紹你怎么從0到1搭建項目的webpack 的構建流程手寫webpack插件你有什么想問我的嗎 2. 你怎么從 0 到 1 搭建項目的 在面試中回答從 0 到 1 搭建前端項目&#xff0c;可按以下詳細步驟闡述&#xff1a; 1. 項目前期準備 需求理解與分析 和產品經理、客戶等相關人…

在vitepress中使用vue組建,然后引入到markdown

在 VitePress 中&#xff0c;每個 Markdown 文件都被編譯成 HTML&#xff0c;而且將其作為 Vue 單文件組件處理。這意味著可以在 Markdown 中使用任何 Vue 功能&#xff0c;包括動態模板、使用 Vue 組件或通過添加 <script> 標簽為頁面的 Vue 組件添加邏輯。 值得注意的…

Jupyter Notebook 常用命令(自用)

最近有點忘記了一些常見命令&#xff0c;這里就記錄一下&#xff0c;懶得找了。 文章目錄 一、文件操作命令1. %cd 工作目錄2. %pwd 顯示路徑3. !ls 列出文件4. !cp 復制文件5. !mv 移動或重命名6. !rm 刪除 二、代碼調試1. %time 時間2. %timeit 平均時長3. %debug 調試4. %ru…

Java面試黃金寶典12

1. 什么是 Java 類加載機制 定義 Java 類加載機制是 Java 程序運行時的關鍵環節&#xff0c;其作用是把類的字節碼文件&#xff08;.class 文件&#xff09;加載到 Java 虛擬機&#xff08;JVM&#xff09;中&#xff0c;并且將字節碼文件轉化為 JVM 能夠識別的類對象。整個類…

第十四章:模板實例化_《C++ Templates》notes

模板實例化 核心知識點解析多選題設計題關鍵點總結 核心知識點解析 兩階段查找&#xff08;Two-Phase Lookup&#xff09; 原理&#xff1a; 模板在編譯時分兩個階段處理&#xff1a; 第一階段&#xff08;定義時&#xff09;&#xff1a;檢查模板語法和非依賴名稱&#xff0…