Mysql 基本查询

mysql 基本查询(crud)内容总结

该文档系统讲解了 mysql 中表的增删改查(crud)操作,即 create(创建)、retrieve(读取)、update(更新)、delete(删除),并附带大量案例与语法说明。以下按章节梳理核心内容。


一、create(插入数据)

基本语法:

sql 复制代码
insert [into] table_name [(column [, column] ...)]
values (value_list) [, (value_list)] ...

1. 单行数据 + 全列插入

  • value_list 数量必须与表定义列的数量及顺序一致。
  • 若不指定 id,mysql 会使用默认值(自增)填充。

2. 多行数据 + 指定列插入

  • 一次插入多行,value_list 数量必须与指定列数量及顺序一致。
  • 示例:insert into students (id, sn, name) values (102, 20001, '曹孟德'), (103, 20002, '孙仲谋');

3. 插入否则更新(on duplicate key update)

  • 当主键或唯一键冲突时,可选择同步更新操作。
  • 受影响行数含义:
    • 0 行:冲突数据与 update 值相等,未更新。
    • 1 行:无冲突,插入成功。
    • 2 行:有冲突,数据被更新。
  • 可用 select row_count(); 获取受影响行数。

4. 替换(replace)

  • 无冲突则直接插入;有冲突则先删除再插入。
  • 受影响行数:1 行表示插入;2 行表示删除后重新插入。

二、retrieve(查询数据)

基本语法:

sql 复制代码
select [distinct] {* | {column [, column] ...}}
[from table_name]
[where ...]
[order by column [asc | desc], ...]
limit ...

1. select 列

  • 全列查询 :select * from ...(不建议,数据量大且可能影响索引)。
  • 指定列查询:列顺序可与表定义顺序不同。
  • 表达式查询:可包含常量、单字段、多字段表达式。
  • 别名 :select column [as] alias_name ...
  • 去重 :select distinct column from ...

2. where 条件

  • 比较运算符 :>、>=、<、<=、=、<=>、!=、<>、between ... and ...、in (...)、is null、is not null、like
  • 逻辑运算符 :and、or、not
  • 典型用法:
    • 范围查询:between 80 and 90
    • 枚举查询:in (58, 59, 98, 99)
    • 模糊匹配:like '孙%'(% 匹配任意多个字符)、like '孙_'(_ 匹配一个字符)
    • 字段间比较:where chinese > english
    • null 安全比较:<=> 与 = 的区别(null = null 结果为 null,null <=> null 结果为 true)

3. 结果排序(order by)

  • asc 升序(默认),desc 降序。
  • 支持多字段排序,优先级按书写顺序。
  • 可使用表达式或列别名排序。
  • null 视为比任何值都小。

4. 筛选分页(limit)

  • limit n:从 0 开始取 n 条。
  • limit s, n:从 s 开始取 n 条。
  • limit n offset s:更明确的写法,建议使用。
  • 建议对未知表查询时加 limit 1,避免全表扫描导致卡死。

三、update(更新数据)

语法:

sql 复制代码
update table_name set column = expr [, column = expr ...]
[where ...] [order by ...] [limit ...]
  • 可更新单列或多列。
  • 更新值可基于原值计算,如 set math = math + 30(不支持 math += 30)。
  • 可结合 order by ... limit 更新指定行。
  • 慎用无 where 的全表更新。

四、delete(删除数据)

语法:

sql 复制代码
delete from table_name [where ...] [order by ...] [limit ...]
  • 可删除指定行或整表数据。
  • 删除整表后,自增 id 不会重置(继续在原值上增长)。

截断表(truncate)

sql 复制代码
truncate [table] table_name
  • 只能整表操作,不能部分删除。
  • 比 delete 快,但不经过真正的事务,无法回滚。
  • 会重置 auto_increment 项。

五、插入查询结果

语法:

sql 复制代码
insert into table_name [(column [, column ...])] select ...

案例:删除表中重复记录

  1. 创建结构相同的空表:create table no_duplicate_table like duplicate_table;

  2. 插入去重数据:insert into no_duplicate_table select distinct * from duplicate_table;

  3. 重命名表实现原子去重:

    sql 复制代码
    rename table duplicate_table to old_duplicate_table,
                 no_duplicate_table to duplicate_table;

六、聚合函数

函数 说明
count(distinct expr) 返回数据数量
sum(distinct expr) 返回数据总和(非数字无意义)
avg(distinct expr) 返回平均值(非数字无意义)
max(distinct expr) 返回最大值(非数字无意义)
min(distinct expr) 返回最小值(非数字无意义)
  • count(*) 不受 null 影响;count(qq) 不统计 null。
  • count(distinct math) 统计去重后的数量。
  • 无结果时 sum 返回 null。

七、group by 子句

语法:

sql 复制代码
select column1, column2, ... from table group by column;
  • 对指定列进行分组查询。

  • 示例:

    • 显示每个部门的平均工资和最高工资。
    • select avg(sal), min(sal), job, deptno from emp group by deptno, job;
  • having 与 group by 配合,对分组结果进行过滤:

    sql 复制代码
    select avg(sal) as myavg from emp group by deptno having myavg < 2000;
    • having 作用类似 where,但作用于分组后的结果。

该文档全面覆盖了 mysql 表的基本 crud 操作,从插入(单行/多行/冲突处理/替换)、查询(列选择、条件过滤、排序、分页)、更新、删除(含 truncate),到聚合函数、分组查询及实战练习,是一份体系完整的 mysql 入门与进阶学习资料。重点强调了:

  • 查询时避免 select *,注意 limit 保护。
  • 更新和删除操作慎用无 where 的全表操作。
  • truncate 与 delete 的区别。
  • group by 与 having 的配合使用。
  • sql 关键字执行顺序对查询逻辑的影响。
相关推荐
这个DBA有点耶6 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB7 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB7 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB7 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
ProcessOn8 小时前
纯干货!MySql实战02:一条SQL更新语句执行流程大探索!
sql·mysql·sql server
这个DBA有点耶9 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768912 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
小羊没烦恼!13 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
注塑机数据采集联网13 小时前
如何解决注塑机数据采集联网对接MES系统数据WiFi传输数据不稳问题
大数据·数据库·物联网·数据挖掘·数据分析