前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【MySQL】从零开始:掌握MySQL数据库的核心概念(四)

【MySQL】从零开始:掌握MySQL数据库的核心概念(四)

作者头像
风中的云彩
发布2025-03-27 08:30:46
发布2025-03-27 08:30:46
2500
代码可运行
举报
文章被收录于专栏:C/C++的自学之路C/C++的自学之路
运行总次数:0
代码可运行

人们之所以不愿改变,是因为害怕未知。但历史唯一不变的事实,就是一切都会改变。

前言

这是我自己学习mysql数据库的第四篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。 上一期笔记是关于mysql数据库的表格约束,没看的同学可以过去看看: 【MySQL】从零开始:掌握MySQL数据库的核心概念(三)-CSDN博客

https://cloud.tencent.com/developer/article/2508028

表格的增删查改

正常插入
代码语言:javascript
代码运行次数:0
运行
复制
//指定列单行插入
insert into tb_name() values();
//全列单行插入
insert into tb_name values();
//指定列多行插入
insert into tb_name() values(),();
//全列多行插入
insert into tb_name values(),();
冲突插入
代码语言:javascript
代码运行次数:0
运行
复制
//插入更新
insert into tb_name() values() 
on duplicate key update column_name1=xxx,column_name2=yyy,...;
//替换更新
replace into tb_name() values(); 

此时无法正常插入,已经存在冲突数据主键值重复或者唯一键值重复insert into插入更新时,会存在以下情况:

  • -- 0 row affected: 表中有冲突数据,但冲突数据的值和update的值相等。
  • -- 1 row affected: 表中没有冲突数据,数据被插入。
  • -- 2 row affected: 表中有冲突数据,并且数据已经被更新。
  1. replace into替换更新时,会存在以下情况:
  • -- 1 row affected: 表中没有冲突数据,数据被插入。
  • -- 2 row affected: 表中有冲突数据,删除后重新插入。
查询插入
代码语言:javascript
代码运行次数:0
运行
复制
insert into tb_name select ...;

除了向表格中插入具体的数据,还可以向表格中插入查询出来的数据

delete子句-turncate子句
代码语言:javascript
代码运行次数:0
运行
复制
//删除表格的数据
delete from tb_name ...;
//重置表格
turncate table tb_name;

turncate只能对整个表格进行操作,不能像delete一样针对部分数据操作。 turncate会重置auto_increment项。 实际上turncate不对数据操作,所以比delete更快,但是turncate在删除数据的时候,并不经过真正的事物,所以无法回滚。

整体查询
代码语言:javascript
代码运行次数:0
运行
复制
//全列查询
select * from tb_name;
//指定列查询
select column_name1 column_name2 from tb_name;
//表达式运算查询
select column_name1 as new_name1 column_name2+column_name3+num as new_name2 from tb_name;
//去重查询
select distinct column_name1 from tb_name;

通常情况下不建议使用全列查询

  • 查询的列越多,意味着需要传输的数据量越大。
  • 可能会影响到索引的使用。
条件查询
运算符

,>=,<,<=

大于,大于等于,小于,小于等于

=

等于, null 不安全

!=

不等于

between a and b

范围匹配, a,b ,如果 a<=value<=b ,返回 true(1)

in(option,...)

如果是 option中的任意一个,返回true(1)

is null

是null

is not null

不是null

like

模糊匹配。其中 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符。

and

与运算,多个条件必须都为true(1),结果才是true(1)

or

并运算,任意一个条件为true(1),结果为true(1)

not

非运算,条件为true(1),结果为false(0)

where子句
代码语言:javascript
代码运行次数:0
运行
复制
select ... from ... where ...

语法上,先执行from...,再执行where...,最后执行select...。所以在where子句中,不能使用select...中定义的别名。 where子句中可以使用圆括号()来限制先后逻辑。

修改数据
代码语言:javascript
代码运行次数:0
运行
复制
update tb_name set column_name_change ...;

column_name_change大部分以重新赋值的形式呈现。

查询排序

代码语言:javascript
代码运行次数:0
运行
复制
//升序
asc
//降序
desc
//
select ... from ... where ... order by column_name1 sort_order;

order by子句中,默认升序排序NULL值也参与排序,但是视为比任何值都小。 语法上,先执行from...,再执行where...,然后执行select...,最后执行order by...。所以在where子句中,不能使用select...中定义的别名,但是在order by子句中,可以使用select...中定义的别名。

分页筛选

代码语言:javascript
代码运行次数:0
运行
复制
//从下标为0的数据开始,往后筛选n条数据
select ... from ... where ... limit n;
//从下标为s的数据开始,往后筛选n条数据
select ... from ... where ... limit n offset s;

未知表进行查询时,最好加上:limit 1。避免因为表中数据过大,查询全表数据导致数据库卡死。

聚合函数

count()

返回查询到的数据的数量

sum()

返回查询到的数据的总和,不是数字没有意义

avg()

返回查询到的数据的平均值,不是数字没有意义

max()

返回查询到的数据的最大值,不是数字没有意义

min()

返回查询到的数据的最小值,不是数字没有意义

代码语言:javascript
代码运行次数:0
运行
复制
select func(column_name) from tb_name;

聚合函数视为一个整体,相当于一个新的变量

分组查询

代码语言:javascript
代码运行次数:0
运行
复制
select func(column_name1) from tb_name group by column_name2 having ...;

分组的目的是为了更好的进行分组聚合统计。 分组的依据一般是指定的列名,根据该列的不同数据来进行分组。 where主要是对具体的某一列进行条件筛选,having主要是对分组后的结果进行条件筛选。 wherehaving的条件筛选的阶段是不同的。

致谢

感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 表格的增删查改
      • 正常插入
      • 冲突插入
      • 查询插入
      • delete子句-turncate子句
      • 整体查询
      • 条件查询
      • 修改数据
  • 查询排序
  • 分页筛选
  • 聚合函数
  • 分组查询
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档