MySQL核心篇:增删改查(CRUD)

文章目录

文章作者:当战神遇到编程

文章专栏:MySQL

欢迎大家点赞👍评论📝收藏⭐文章



一、什么是 CRUD?

CRUD 是数据库最核心的四种操作:

字母 含义 SQL语句
C Create(新增) INSERT
R Retrieve(查询) SELECT
U Update(修改) UPDATE
D Delete(删除) DELETE

二、准备测试表

sql 复制代码
CREATE TABLE student(
    id INT,
    name VARCHAR(20),
    age INT
);

三、C:INSERT 新增数据

向表中插入记录。

1.插入一条数据

sql 复制代码
INSERT INTO student VALUES(1,'Tom',18);

2.指定字段插入

sql 复制代码
INSERT INTO student(id,name) VALUES(2,'Jerry');

3.插入多条数据

sql 复制代码
INSERT INTO student VALUES(3,'Alice',20),(4,'Bob',19);

4.插入查询结果

当你需要把一张表的数据"复制"到另一张表时使用。

sql 复制代码
-- 目标表(用于备份或迁移)
CREATE TABLE student_backup(
    id INT,
    name VARCHAR(20),
    age INT
);

场景一:两张表结构完全一样(快速全量备份)

如果你只是想做一个完全一致的备份,可以使用 * 简写。

sql 复制代码
-- 只要 student_backup 的字段数量、顺序、类型与 student 完全一致,即可使用
INSERT INTO student_backup SELECT * FROM student WHERE age > 18;

场景二:指定字段插入(灵活迁移)

如果两张表结构不同,或者你只想复制其中某几列,必须显式指定列名。

sql 复制代码
-- 仅将 id 和 name 备份,age 字段在目标表中可能是默认值或 NULL
INSERT INTO student_backup (id, name) 
SELECT id, name FROM student WHERE age > 18;

四、R:SELECT 查询数据

查询表中的记录。

1.查询全部数据

sql 复制代码
SELECT * FROM student;

2.查询指定字段

sql 复制代码
SELECT name,age FROM student;

3.查询时使用表达式

sql 复制代码
SELECT name, age + 1 AS next_age FROM student;

说明:

  • 表达式 (age + 1):实时计算结果,不会修改数据库中的原始数据。
  • 别名 (next_age):给结果集中的列起个新名字,方便查看。

4.去重查询

sql 复制代码
SELECT DISTINCT age FROM student;

说明:

  • 作用:过滤掉结果集中的重复行。
  • 注意:这只是展示效果,数据库里的原始记录并不会被删除。

5.条件查询

  • 比较运算符:
运算符 说明
>, >=, <, <= 大于、大于等于、小于、小于等于
= 等于
!=, <> 不等于
BETWEEN ... AND ... 范围查询
IN(...) 在指定集合中
IS NULL 判断为空
IS NOT NULL 判断不为空
LIKE 模糊查询
  • 逻辑运算符:
运算符 说明
AND 多个条件同时成立
OR 任意一个条件成立
NOT 条件取反

1.查询年龄大于18

sql 复制代码
SELECT * FROM student WHERE age > 18;

2.查询姓名为Tom

sql 复制代码
SELECT * FROM student WHERE name = 'Tom';

3.多条件查询

sql 复制代码
SELECT * FROM student WHERE age >= 18 AND age <= 20;

4.范围查询

sql 复制代码
SELECT * FROM student WHERE age BETWEEN 18 AND 20;
  • 闭区间:包含边界值,等同于 age >= 18 AND age <= 20

5.集合查询

sql 复制代码
SELECT * FROM student WHERE name IN ('Tom','Jerry');
  • 逻辑:匹配括号内任意一个值即可。
  • 优势:比写一长串的 OR 更加简洁高效。

6.模糊查询

sql 复制代码
SELECT * FROM student WHERE name LIKE 'T%';

说明:

  • %:任意多个字符
  • _:任意一个字符

7.空值查询

sql 复制代码
SELECT * FROM student WHERE email IS NULL;

6.排序查询

排序时,需要选取一个或多个列作为比较依据。

1.基础语法

sql 复制代码
-- 升序(默认):从小到大排。ASC 可省略。
SELECT * FROM student ORDER BY age ASC; 

-- 降序:从大到小排。
SELECT * FROM student ORDER BY age DESC;

-- 使用表达式别名排序(ORDER BY 在 SELECT 之后执行,所以认识别名)
SELECT name, age + 1 AS next_age FROM student ORDER BY next_age DESC;

2.多列排序(优先级)

sql 复制代码
-- 先按id升序,id相同时,再按age降序
SELECT * FROM student ORDER BY id ASC, age DESC;

核心要点

  • 顺序未定义

    重要 ! 如果没有指定 ORDER BY ,数据库返回结果的顺序是不可靠且未定义的。为了确保业务逻辑(如分页显示)的一致性,务必手动指定排序字段。

  • 针对行排序

    ○ 排序是针对整行记录的。根据某一列排好序后,该行所有的字段会整体跟着移动。

  • 排序关键字控制

    ○ ASC (Ascending ):升序,默认值。如果不写,数据库就默认从小到大排。

    ○ DESC (Descending):降序,必须显式书写,实现从大到小排。

  • NULL 的特殊性

    ○ 在 SQL 中,NULL 被视为最小值

    ○ 升序 (ASC) 时 NULL 在最前,降序 (DESC) 时 NULL 在最后。

  • 多列排序的优先级

    从左往右看:先按第一列排序,只有当第一列值完全相同(平局)时,才会参考第二列进行内部排序。

  • 物理存储不变

    ○ 排序只是改变了结果的展示顺序,不影响数据库中数据的物理存储顺序

7.分页查询

当数据库表中有成千上万条数据时,一次性全部查出来不仅速度慢,用户也看不过来。分页查询的作用就是按需分批取出数据。

sql 复制代码
-- 【格式 A】取前 n 条
SELECT * FROM student LIMIT 2;

-- 【格式 B】跳过 s 条,取 n 条
SELECT * FROM student LIMIT 1, 2;

-- 【格式 C】使用 OFFSET 关键字(逻辑最清晰,推荐!)
-- 效果:同样是跳过 1 条取 2 条
SELECT * FROM student LIMIT 2 OFFSET 1;
  • 执行顺序:

    ○ LIMIT 是 SQL 语句执行过程中的最后一步

    ○ 顺序是:FROM -> WHERE -> SELECT -> ORDER BY -> LIMIT

  • 直白逻辑(跳过与取出)

    第一个数字 :是你打算"扔掉"不要的数量(偏移量 Offset)。

    第二个数字 :是扔掉后你要"连续拿走"的数量(行数 Count)。

    记住: 数据库的下标是从 0 开始的。跳过 0 条 = 从第 1 条开始取。

  • 边界情况:没数据了怎么办?

    ○ 如果 LIMIT 请求的范围超出了表中的实际数据量(例如:表只有 5 条,你写 LIMIT 10, 5):

    ○ 结果:数据库不会报错 ,也不会返回带 NULL 的行,而是直接返回空结果集

  • 物理存储不变:最后再次强调,分页只是为了展示。它不会删除或移动数据库里的原始数据。

  • 实战:网页分页公式

    ○ 假设每页显示 pageSize 条,当前是第 pageNum 页:

    SQL 公式:LIMIT (pageNum - 1) * pageSize, pageSize

八、U:UPDATE 修改数据

修改数据库服务器硬盘上的原始数据。

修改Tom年龄为20

sql 复制代码
UPDATE student SET age = 20 WHERE name = 'Tom';

同时修改多个字段

sql 复制代码
UPDATE student SET name = 'Lucy', age = 21 WHERE id = 1;

注意:

  • 不加 WHERE 会修改整张表。

九、D:DELETE 删除数据

删除Tom

sql 复制代码
DELETE FROM student WHERE name = 'Tom';

删除全部数据

sql 复制代码
DELETE FROM student;

注意:

  • 不加 WHERE 会删除所有记录。

十、总结速记

新增:INSERT

查询:SELECT

修改:UPDATE

删除:DELETE

条件:WHERE

排序:ORDER BY

分页:LIMIT

相关推荐
2201_761040592 小时前
MySQL中如何利用REPLACE函数替换文本_MySQL字符串替换技巧
jvm·数据库·python
qq_330037992 小时前
将数据库中的 UTC 时间准确转换为英国夏令时(BST)的 PHP 实现方法
jvm·数据库·python
2401_887724502 小时前
mysql如何通过调整临时表空间配置优化查询_优化innodb_temp_data_file_path
jvm·数据库·python
qq_654366982 小时前
如何配置Oracle环境变量_ORACLE_HOME与PATH路径映射
jvm·数据库·python
猿小喵2 小时前
记录一次长时间未提交事务造成的慢SQL
数据库·sql·mysql
pele2 小时前
bootstrap怎么实现带有验证状态的表单
jvm·数据库·python
上海合宙LuatOS2 小时前
LuatOS扩展库API——【 lbsLoc2】免费版单基站定位
数据库·物联网·oracle·junit·lua·luatos
蜡台2 小时前
Centos 安装Mysql
linux·mysql·centos·yum·mysql8
djjdjdjdjjdj2 小时前
CSS实现图片中心剪裁定位_background-position center
jvm·数据库·python