MYSQL 表的增删查改-更新/删除

跟新-update

语法:

UPDATE table_name SET column = expr [, column = expr ...]

WHERE ...\] \[ORDER BY ...\] \[LIMIT ...

跟新与select的基本用法类似。指定修改的表和列,使用where,order by limit等关键字筛选出具体需要修改的数据,通过set修改。

复制代码
MariaDB [test_db]> update score set english=60 where id=2;

修改后,id为2的列中的english就被设置成60了。

也可以通过,order by排序再使用limit筛选最低最高的几位进行更改。

筛选出语文最差的3为进行更改。

复制代码
MariaDB [test_db]> update score set chinese=chinese+20 order by chinese limit 3;

将三者的语文加20;

若是不加任何限定,筛选语句的话就是全表对应列都进行更新

复制代码
MariaDB [test_db]> update score set math=80;

删除数据-delete

语法

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

删除行数据,若不设置筛选条件则删除整张表所有数据。

复制代码
MariaDB [test_db]> delete from score where name='詹天佑';

delete只删除数据,走事务流程,不会改变表结构,

复制代码
MariaDB [test_db]> delete from score where id=5;

这里删除了自增主键中id最大的值

自增主键的计数器不会变的,即使是删除了整张表所有数据,继续插入也是从6开始。

截断表 truncate

语法

TRUNCATE [TABLE] table_name

其作用是删除表中的所有数据

只能对整表操作,实际上mysql不对数据做任何操作,并不走事务的流程,效率比delete更快,也无法回滚。也会重置auto_increment。

这个表的自增计数已经到4了。

复制代码
MariaDB [test_db]> truncate table for_truncate;

对表进行截断后

自增计数也被删除了。

复制代码
MariaDB [test_db]> insert into for_truncate (name) values ('A');

从新插入,计数器又是从1开始了。

插入查询结构

语法

INSERT INTO table_name [(column [, column ...])] SELECT ...

可以将查询的结果作为另外一张表插入的值。

先创建一张数据源表

插入一些测试值。

接下来我们将原表的数据进行去重然后放入另外一张结构相同的表中

复制代码
MariaDB [test_db]> create table objective like soure;

MariaDB [test_db]> insert into objective select distinct * from soure;

表中就是去重后的数据了。

聚合函数

mysql里面也是拥有一些可以直接使用的函数的。

count([distinct]expr):返回数据的数量。

sum([distinct]expr):计算所有查询到的数据的总和,数据必须可聚合得是数字才有意义

avg([distinct]expr):计算所有查询到得数据得平均数,数据必须可聚合得是数字才有意义

max([distinct]expr):计算所有查询到得数据得最大值,数据必须可聚合得是数字才有意义

min([distinct]expr):计算所有查询到得数据得最小值,数据必须可聚合得是数字才有意义

复制代码
MariaDB [test_db]> select count(*) from score;

()内是*或者数字都是一般都是*或1。

这里表示一共有7列数据

复制代码
MariaDB [test_db]> select count(name) from score;

括号中也可以是列名,查找这个列一共有几行数据,NULL不计入数量。

复制代码
MariaDB [test_db]> select count(distinct math) from score;

也可以进行去重查找,将有重复得都去掉

数据总和

复制代码
MariaDB [test_db]> select sum(math+chinese+english) from score;

将所有分数加总,当然可以单独列,也可以重命名。也可以去重,所有得聚合函数功能不同,但是用法基本相同。

复制代码
MariaDB [test_db]> select sum(math) 数学,sum(chinese) 语文,sum(english) 英文 from score;

条件筛选平均数

复制代码
MariaDB [test_db]> select avg(math) 数学 from score where chinese>60;

将语文成绩大于60的数学成绩取其平均数。

MAX和MIN就不继续演示了,就是在筛选出来的数据中按照某一列取其最大最小值。

分组-group by

语法

select column1, column2, .. from table group by column;

分组一般都与聚合函数一起使用,在mysql中中间过程其实我们也能将其看作是一张表。

这里就不创建表,直接导入一张oracle的一张测试表

复制代码
MariaDB [test_db]> source /root/ljj2025/MySQL/scott_data.sql;

source +文件路径,文件必须是.sql文件。

三张表,一张是部门表,一张员工表,一张薪资表。

虽然这里并没有明确定义但是员工表中的deptno实际上是部门表的foreign key,部门表是主表,员工表是丛表。

复制代码
MariaDB [scott]> select deptno from emp group by deptno;

这是按部门编号对emp表中的内容进行分组查询

我们查看deptno列,里面只有三种部门编号-10,20,30,所以一共可以分为三组。

根据多个属性进行分组

复制代码
MariaDB [scott]> select deptno,job from emp group by deptno,job;

根据部门进行分组再根据据工作进行分组。

加上对分组的结构进行计数。

复制代码
MariaDB [scott]> select deptno,job,count(*) from emp group by deptno,job;

这里结果就是,部门为10的工作为CLERK的人数为1。

也可以惊醒where条件去除一些行

复制代码
MariaDB [scott]> select deptno,job,count(*) from emp where ename!='MILLER' group by deptno,job;

10号部门的MILLER其工作为CLERK,这里就去除掉了。

分组后一般就是对其进行聚合运算了,如平均值

复制代码
MariaDB [scott]> select deptno,avg(sal) from emp group by deptno;

按照部门计算每部门的平均工资

复制代码
MariaDB [scott]> select deptno,avg(sal),max(sal),min(sal) from emp group by deptno;

部门的最高最低工资

对分组之后,进行聚合计算后的表进行筛选

复制代码
MariaDB [scott]> select deptno,avg(sal) avgsal,max(sal),min(sal) from emp group by deptno having avgsal<2000;

筛选出平均工资低于2000的部门。这里是使用的having关键字,其用作与where的作用一样,都是按列进行筛选,但是优先序不同,where的优先序很高,仅在from table_name的后面,having的优先序在这里是最低的,所以是可以表数据进行分组,聚合,重命名,最后再根据having的表达式进行筛选数据。

整个优先级为select->from table_name->where->group by->having->deptno...(需要显示的列)->order by->limit。

相关推荐
深藏bIue2 小时前
linux服务器mysql目录下的binlog文件删除
linux·服务器·mysql
甜鲸鱼2 小时前
Java与MySQL中的枚举(Enum)
java·mysql
q***44812 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
风123456789~3 小时前
【OceanBase专栏】OB租户-创建实验
数据库·笔记·oceanbase
cmcm!3 小时前
学习笔记1
数据库·笔记·学习
Zero-Talent3 小时前
MySQL初级
数据库·mysql·oracle
烟雨归来3 小时前
oracle数据文件大小异常故障处理
数据库·oracle
jenchoi4133 小时前
【2025-11-23】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·数据库·安全·web安全·网络安全
auspicious航3 小时前
PostgreSQL数据库之使用 pg_waldump 和 pg_walinspect 查看 WAL 文件的内容
数据库·postgresql