帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】深入学习MySQL表数据操作

发表时间:2025-06-16 03:46:00 小编:主机乐-Yutio

前言

这一节我们基于表来做数据方面的操作,同样的,无非就是C(创建)R(读取)U(修改)D(删除)四种操作,但是在R上总能玩出多种花样

正式开始操作之前,我们先来聊一聊它们的关键字:

  • INSERT
  • SELECT
  • UPDATE
  • DELETE

大家可以先通过help命令来查看一下相关的语法,提前预习一下,方便更深的理解

正式上菜

先来看看之前的表结构:

可以看到数据已经插入进来,没有填充数据的列已NULL填充,关于这一点,我们可以在创建表的时候通过DEFAULT来指定默认值,就是在这个时候使用的

没有什么比实际动手有说服力的了

ON DUPLICATE KEY UPDATE

这里还有一个点,用到的不是很多,但是相当实用:ON DUPLICATE KEY UPDATE

也就是说如果数据表中存在重复的主键,那么就进行更新操作,来看:

对比上面的数据,很容易就会发现数据不一样了

  • values(列名): 会取出前面插入的字段的数据

这样就删除了指定条件的数据

那么,如果我们执行删除条件,但是不设置条件呢?下面我们来看一看

先执行insert操作插入几条数据

可以看到,删除了全部的数据

但其实还有一种方式可以清空整张表,就是通过truncate的方式,这种方式的效率更高

当前SQL会查询出表中全部数据,而跟在select后面的*表示:列出全部的字段,如果我们只是想列出某些列的话,那么将它换成指定的字段名就好:

就是这么简单

当然了,还记得这个关键字么:DISTINCT,我们来实验一下:

意思已经很明显了,没错,就是去重操作

但是我要告诉大家的是,distinct关键字如果作用在多个字段的话,那么只有在多个字段组合的情况下重复才会进行生效,举个栗子:

再下一步,我们就需要对全部数据进行聚合,根据前面了解到的聚合函数,我们可以选择使用max()

if()

除了采用case之外,还有其他的方式我们来看看

分页优化

有这么一个场景:MySQL中有2000W的数据,现在要分页显示第1000W之后的10条数据,那么通过常规的方式是这样的:

左关联

左关联查询已left join为主要关键点,两表中的关键字段通过on来进行关联,通过这种方式查询出的数据已左侧表为主,如果其关联的表中不存在数据,那么就返回NULL

右关联

右关联已right join为主要关键点,数据已右侧的关联表为主,其他的操作方式和左关联一样

而且可以看出来,在数据的展示上,右侧表没有在左侧表有对应数据的话,那么左侧表的数据是不会显示出来的

如果在实际工作中的查询都是这么简单的话,简直不要太舒服

聚合查询

前面聊到了聚合函数,聚合函数对一组数据执行计算,并返回单条值。

很多情况下,如果我们想通过聚合函数对表中数据进行分组操作的话,那么就需要采用group by来进行查询

就目前表中的数据,我们可以做一个场景:

  • 计算出表中每个登录账号有多少条记录

如果想要对聚合查询出来的数据进行条件筛选,不能使用where来查询,需要通过having来筛选

还需要注意的是:

  • 当前列没有通过group by 分组,那么无法通过having来查询

语法问题

如果我们在操作的时候遇到了这样的问题:这是由于显示列中包含没有分组的列,由sql_mode的模式来决定的。先来查看下默认设置

主要的是语法不规范


set sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’;

根据提示修改就好

总结

到此这篇关于深入学习MySQL表数据操作的文章就介绍到这了,更多相关MySQL表数据操作内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


联系我们
返回顶部