【MySQL】MySQL 增删改查(CRUD)

画师:竹取工坊

大佬们好!我是Mem0rin!现在正在准备自学转码。

如果我的文章对你有帮助的话,欢迎关注我的主页Mem0rin,一起进步!


文章目录

    • [1. 新增:INSERT](#1. 新增:INSERT)
    • [2. 查询:SELECT](#2. 查询:SELECT)
      • [2.1 基本查询](#2.1 基本查询)
      • [2.2 去重与排序](#2.2 去重与排序)
      • [2.3 条件查询](#2.3 条件查询)
        • [2.3.1 比较运算符](#2.3.1 比较运算符)
        • [2.3.2 范围、集合、空值和模糊匹配运算符表](#2.3.2 范围、集合、空值和模糊匹配运算符表)
        • [2.3.3 逻辑运算符表](#2.3.3 逻辑运算符表)
      • [2.4 分页查询](#2.4 分页查询)
    • [3. 修改:UPDATE](#3. 修改:UPDATE)
    • [4. 删除:DELETE](#4. 删除:DELETE)
    • [5. 总结](#5. 总结)

本文使用 ChatGPT 进行二次整理。

数据库基本层级:

服务器 → 数据库 → 数据表 → 数据行(记录)→ 列(字段)

CRUD 分为新增、查询、修改和删除四类操作。


1. 新增:INSERT

sql 复制代码
-- 插入一行数据
INSERT INTO student (id, name)
VALUES (1, '张三');

-- 按字段顺序插入全部数据
INSERT INTO student
VALUES (2, '李四', 80, 85, 90);

-- 插入多行数据
INSERT INTO student (id, name)
VALUES
    (3, '赵六'),
    (4, '王五');

字符串使用英文单引号,字段和值要一一对应。批量插入通常比逐条插入效率更高。(网络通信、SQL执行、事务等)


2. 查询:SELECT

2.1 基本查询

sql 复制代码
-- 查询全部字段,数据量很多 => 磁盘和网络资源负担
SELECT *
FROM exam; 

-- 查询指定字段,减少不必要的网络开销
SELECT id, name, chinese
FROM exam;

-- 使用表达式和别名,不修改表内的数据
SELECT id, name, chinese + math + english AS total
FROM exam;

2.2 去重与排序

sql 复制代码
-- 去除重复值
SELECT DISTINCT chinese
FROM exam;

-- 按总分降序排列
SELECT id, name, chinese + math + english AS total
FROM exam
ORDER BY total DESC;

-- 按多个字段排序
SELECT id, name, chinese, math
FROM exam
ORDER BY math DESC, chinese ASC;

ASC 为升序,DESC 为降序,默认使用升序。

2.3 条件查询

2.3.1 比较运算符
运算符 含义 示例说明
= 等于 判断两个值是否相等
> 大于 左侧值大于右侧值
>= 大于等于 左侧值大于或等于右侧值
< 小于 左侧值小于右侧值
<= 小于等于 左侧值小于或等于右侧值
!= 或 <> 不等于 判断两个值是否不相等
<=> NULL 安全等于 两边均为 NULL 时结果为真
sql 复制代码
-- 查询英语成绩等于 80 的记录
SELECT *
FROM exam
WHERE english = 80;

-- 使用 NULL 安全等于运算符查询英语成绩为 NULL 的记录
SELECT *
FROM exam
WHERE english <=> NULL;
2.3.2 范围、集合、空值和模糊匹配运算符表
运算符 含义 示例说明
BETWEEN ... AND ... 判断是否位于闭区间内 包含左右边界
NOT BETWEEN ... AND ... 判断是否不在指定区间内 BETWEEN 的否定形式
IN (...) 判断值是否属于指定集合 相当于多个等值条件的组合
NOT IN (...) 判断值是否不属于指定集合 IN 的否定形式
IS NULL 判断是否为空值 不能使用等号代替
IS NOT NULL 判断是否为非空值 排除 NULL
LIKE 模糊匹配 百分号匹配任意长度字符,下划线匹配一个字符
NOT LIKE 模糊匹配的否定形式 查询不满足指定模式的内容
sql 复制代码
-- 查询语文成绩在 60 到 80 之间的记录,包含 60 和 80
SELECT *
FROM exam
WHERE chinese BETWEEN 60 AND 80;

-- 查询学号属于指定集合的记录
SELECT *
FROM exam
WHERE id IN (1, 2, 3);

-- 判断数值 1 是否位于集合中,结果为真
SELECT 1 IN (1, 2, 3);

-- 查询姓名第二个字符为"明"的记录
SELECT *
FROM exam
WHERE name LIKE '_明%';

LIKE 中的通配符:

通配符 含义
% 匹配零个或多个任意字符
_ 匹配一个任意字符
2.3.3 逻辑运算符表
运算符 含义 说明
AND 逻辑与 所有条件都成立时结果为真
OR 逻辑或 至少一个条件成立时结果为真
NOT 逻辑非 对条件结果取反
sql 复制代码
select * from exam where chinese > 80 and english > 80;
select * from exam where chinese > 80 or math > 70 and english > 80;

逻辑运算符优先级为 NOT > AND > OR

2.4 分页查询

sql 复制代码
-- 查询前 n 条记录
SELECT *
FROM exam
LIMIT n;

-- 跳过 s 条,再查询 n 条
SELECT *
FROM exam
LIMIT n OFFSET s;

-- 查询第 3 页,每页 10 条
SELECT *
FROM exam
ORDER BY id
LIMIT 10 OFFSET 20;

3. 修改:UPDATE

sql 复制代码
-- 修改指定学生的数学成绩
UPDATE exam
SET math = 100
WHERE name = '张三';

-- 将语文成绩低于 50 分的记录乘以 2
UPDATE exam
SET chinese = chinese * 2
WHERE chinese < 50;

-- 修改总分最低的三条记录
UPDATE exam
SET math = math + 30
WHERE chinese IS NOT NULL
  AND math IS NOT NULL
  AND english IS NOT NULL
ORDER BY chinese + math + english ASC
LIMIT 3;

没有 WHERE 时会修改整张表。


4. 删除:DELETE

sql 复制代码
-- 删除指定学生的记录
DELETE FROM exam
WHERE name = '张三';

-- 删除英语成绩最低的三条记录
DELETE FROM exam
WHERE english IS NOT NULL
ORDER BY english ASC
LIMIT 3;

没有 WHERE 时会删除表中全部记录。实际项目中也常使用逻辑删除:

sql 复制代码
-- 将记录标记为已删除
UPDATE exam
SET delete_state = 1
WHERE id = 1;

5. 总结

sql 复制代码
-- 1.新增
insert into table_name (列名, 列名...) values (值, 值);
-- 2.查询
select * from table_name; -- 全部查询
select column_name, column_name... from table_name; -- 指定列查询
select column_name/expr as 别名 -- 使用别名
	where column_name/expr 比较|逻辑运算符 --排序查询
	order by colunm/expr/别名 asc/desc --条件查询
	limit n offset s; -- 分页查询(从 s 开始往后 n 个)
select distinct column_name, column_name... from table_name; --去重查询
select * from table_name where column_name like '%值_'; --模糊查询
-- 3.更新
update table_name set column_name = value where ... order by ... asc/desc limit n;
-- 4.删除
delete from table_name where ... order by ... asc|desc limit n;
 
相关推荐
toooooop828 分钟前
MySQL source导入实战:踩坑记,phpMyAdmin 502、source导入巨慢问题解决
mysql
yuzhiboyouye2 小时前
那xml对应的sql语法,列举一下
xml·数据库·sql
. . . . .2 小时前
乐观锁 vs 悲观锁
数据库·sql
Leo.yuan2 小时前
2026年多数据库实时同步的四种架构方案及工具推荐
数据库·架构
hasty3 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
梦想平凡3 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林4 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记4 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
2601_962218614 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
Wang's Blog5 小时前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring