以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.mzph.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…