【MySQL】表的数据处理

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL】表的数据处理


一、 添加数据(insert into )插入

语法:

insert into 表名([字段名1,字段名2,字段名3])values('值1'),('值2)',('值3')...

into 其实可以不用写,可以根据个人意愿决定。

插入数据的时候在没有约束的情况下可以插入null 。

1.1-- 插入时匹配对应的值

desc 【表名】展示表的结构

image.gif编辑 这种方式插入数据,需要指定需要插入的列名(字段),然后根据列名(在记录没有约束的情况下)插入数据。

意思就是你可以只插入“李四" 独占一行。注意观察插入日期的格式。


1.2 -- 不声明字段新增数据,必须把所有字段的值都写上

image.gif编辑此处使用now() 函数来插入日期时间。


1.3 -- insert语句后面可以加多个VALUES,可以添加多个数据

image.gif编辑 多行插入只需要写一个 values 即可,多行插入的性能也是优于 单行插入的,因为MySql 本质上就是客服端服务器的程序,客服端发出指令,服务器进行相应的处理,一行一行的插入意味着反复发送指令,这个点不知道大家能否能 get 到呢?


注意事项:

字段和字段之间使用英文逗号隔开

字段是可以省略的,但是后面的值必须要一一对应

可以同时插入多条数据,VALUES后面的值需要使用,隔开即可。

value,是一个具体的值,也可以是一个函数


二、查询数据 (select)

现在才是Mysql 学习中的重点,查询数据,查找表的数据实际上建立了 一张临时的表, 不会对原先的表产生改变,这张临时表只是在客户端展示一下,生命周期很短。

用户在客户端输入sql 语句,通过请求发给服务器,服务器根据请求相应得把查询结果从存取器中读取出来,通过一系列介质(网络等)传输给客服端,客服端把这些数据以临时表的形式展示出来。

2.1 基础查询

语法:

SELECT 字段,...FROM 表

以student 表为例。

-- 查询所有的员工 SELECT 字段 FROM 表

如果我们需要一次性查找所有的字段,其实不用讲所有字段全部列举出来,可以使用 ”*“ 来替代。

image.gif编辑 可以看出两者的结果是一样的。


-- 查询指定字段,ID + Name

image.gif编辑-- 别名,给查询结果起一个名字 AS, 可以给字段取别名,也可以给表取别名

-- as可以加也可以不加

image.gif编辑 这样看起来舒服多了吧,哈哈,as 不加也可以运行,但是最好是加上,避免将别名看成字段。

-- 别名可以简化字段或者表的名称,更精准的输入

-- 给student表起别名为stu

不使用 as 也是可以的,在复杂的查询中,使用别名查询,能提升效率。


2.2 表达式查询

表达式查询也叫查询字段为表达式,为了方便展示,博主这里创建一个 学生成绩表(grade)。

包含 id (学号), name (姓名) ,chinese (语文), math (数学),english (英语) 这几个字段。

image.gif编辑 表创建成功后,接下插入几条数据。

1, 张三, 80, 90, 99,

2, 李四, 88, 76, 60 ,

3, 王五, 98, 90, 88,

4, 张三, 58, 25, 59,

image.gif编辑


例题:查找 grade 成绩表,所有学生的总成绩,显示字段 id, name, “总成绩" ;

image.gif编辑 可以看出为了查询总成绩,我们直接将 语文,数学,英语,字段相加形成一个新的字段展示出来,然后利用 as 重命名为 “总成绩 ”。如果不使用 as 字段就展示 chinese + math + english.

此时 三个字段相加型成一个新的字段的查询就叫做表达式查询(加减乘除都可),表达式查询的本质是让列和列之间进行运算 (而不是行和行之间)。

例题:查找 grade 成绩表,所有学生的语文成绩减 10 分,显示所有字段。

image.gif编辑 由此可见,查找表的数据实际上建立了 一张临时的表,这张临时表跟硬盘上的表没有任何羁绊,临时表只是在数据表的基础上产生的条件拷贝,不会对数据表产生任何影响。


2.3 去重查询 (distinct)

使用DISTINCT关键字对某列数据进行去重;

去重大家应该都能够理解是什么意思,想象这样一种环境,查找全班同学的 性别,根据性别去重操作后,得到的结果只有两种性别“男”,”女”,在学校的教师表中,查找职称,根据职称去重操作后,就可以展示每一种职称且是不重复的,以成绩表(grade)为例,有两个名字叫张三的同学,我们根据姓名去重后看看有什么效果。

作用:去除SELECT查询出来的结果中重复的数据,只显示一条

image.gif编辑 可以看出重复的姓名已经去掉了,distinct 针对多列去重的时候,要求这些列值全部都相同才视为重复。

image.gif编辑


2.4 排序查询 (order by)

语法:

--asc 为升序排序(从小到大)

--desc 为降序(从大到小)

一般是对查询数据的结果根据某个字段或者是多个字段进行排序。

order by 【字段】 asc 或 desc 【字段】 asc 或 desc …… ;

    1. 如果查询语句没有添加 order by 子句,那么查询的结构不保证是有序的,不可以依赖没有经过排序的查询结果的顺序。
    2. null 数值代表表中某项数据为空,视为比任何值都小,升序出现在最上面,降序出现在最下面。

    例题:查找 grade 成绩表,所有学生的总成绩,显示字段 id, name, “总成绩" 降序,升序排序

    升序:如果最后不添加 asc 默认也是 升序排序。

    image.gif编辑降序:desc

    image.gif编辑使用别名排序

    image.gif编辑可以对多个字段进行排序

    查询同学各门成绩,依次按语文升序 ,数学降序,英语升序的方式显示

    这句话是什么意思呢,优先按照语文成绩升序排序,当遇到相同语文成绩时,再比较两者数学成绩,降序排序,如果此时数学成绩也相同,就按照英语升序排序。 多字段排序时,字段之间使用 “,”间隔即可。

    image.gif编辑 排序优先级根据顺序来。


    2.5 条件查询 (where)

    作用: 检索数据中==符合条件==的值

    搜索的条件由一个或者多个表达式组成!结果 布尔值

    条件查询相当于针对数据库的表中的数据进行遍历,取出每一行数据,把数据代入到条件中,判断条件是否符合,如果返回的条件为真,这个记录就保留,作为结果集的一部分,直到表中的数据全部遍历完毕,然后服务端会把结果集返回给客户端,客户端将数据以临时表的形式展示给用户。

    别名不能作为 where 条件和当前 sql 的执行循序有关,当然这也是 mysql 对于语法规定的一部分。


    比较运算符

    image.gif编辑2.5.1 基本比较查询

    例题:查找英语成绩大于等于80分的同学

    image.gif编辑


    例题:查找姓名为张三同学成绩

    image.gif编辑例题:查找总成绩大于等于 250 分的同学的总成绩及相关信息

    image.gif编辑


    1. 条件查询可以根据两列进行比较,例如:语文成绩大于数学成绩的同学的信息

    2. where 条件可以使用表达式,但是不能使用别名。

    3.别名不能作为 where 条件和当前 sql 的执行顺序有关,当然这也是 mysql 对于语法规定的一部分。


    2.5.2 逻辑运算符

    image.gif编辑例题:查找姓名为张三 且 各科成绩在80 分以上的同学的信息

    image.gif编辑例题:查找 语文成绩在80 分 或者 英语在 90分以上的同学的信息

    image.gif编辑例题:查找姓名为张三 且 语文成绩 大于 50分 或者 语文成绩 大于 80

    image.gif编辑 1. 如果一个 where 中又存在 and 又存在 or 先执行 and 后执行or 。

    2. and 的优先级高于 or ,同时使用时,需要使用小括号()包裹优先执行的部分。


    2.5.3 模糊查询,范围查询

    image.gif编辑范围查询:

      1. between……and…… 这个区间是前闭后闭的区间。

      例题:查询数学成绩在 [80,90] 分的同学及其数学成绩

        1. image.gif编辑使用 and 也可以实现该功能呢

        image.gif编辑 两者是一样的运行机制,结果也没有什么区别。


          1. in -- ----------------------- in(具体的一个或者多个值) ------------------------

          例题:查找姓名为张三 且 语文成绩在80 或者 58 分的同学的信息

          image.gif编辑


          模糊查询:like

          -- 查询 " 张“开头的员工姓名

          image.gif编辑-- like结合 %(代表0到任意个字符),“%任意字符%”,表示包含字符匹配。


          -- 查询结尾是‘四”开头仅一个字的员工

          image.gif编辑like 结合“_”(匹配一个字符)。


          -- 查询姓名是“张“开头的员工信息 且 语文成绩大于等于 80 的同学信息。

          image.gif编辑


          null 查询

          is not null 表示非空,is null 代表 空。

          --查询表中姓名非空的学生的信息

          image.gif编辑--查询表中姓名 空 的学生的信息

          image.gif编辑 为了方便展示这里博主先插入了一条 含有 null 的记录。

          image.gif编辑


          2.6 分页查询 (limit)

          -- 100万,为什么要分页?缓解数据库压力,给人的体验更好

          -- 语法: limit 起始行, 页面的大小,下标是从 0 开始的。区间是左闭右闭

          -- 从 0 开始,筛选 n 条结果

          SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;

          -- 从 s 开始,筛选 n 条结果

          SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;

          -- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用

          SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

          注意: s 是起始行数, n 是页面最大显示记录数。

          查询区间 [1,2],

          image.gif编辑 当我们对数据进行分页的时候,如果查询结果不足我们按页分配的记录数, 不会有任何影响,照常显示。

          分页查询常常运用于查询结果的最后,给用户一个好的视觉体验。


          三、修改数据 (update)

          语法:

          update 【表名】set 【字段】新值;

          初始表:

          image.gif编辑例题:将id 为4的同学的姓名改为张小三

          image.gif编辑也可以多个字段修改数据。

          例题:将id 为5的同学的姓名改为 赵六,语文成绩修改为 90分

          image.gif编辑例题:所有同学的语文成绩 减去10分

          image.gif编辑使用updete 修改数据如果不添加条件限制修改范围则是整个表的被修改列数据都会发生改变。


          四、删除数据

          4.1 删除数据(delete)

          delete from 【表名】where 【条件】

          image.gif编辑例题:删除张三同学的信息

          image.gif编辑注意:

          在删除数据(记录)的时候注意要添加条件,条件的选择很重要,一般选择不可重复的值作为条件,便于精准定位,例如每个人的身份证号,如果不写条件的话,表中的数据会一条一条的删除。

          -- 删除数据(避免这样写,会全部删除)

          delete from emp


          4.2 清空表数据(truncate)

          truncate

          作用:完全清空一个数据库表,表的结构和索引约束不会变

          -- 清空 student 表

          TRUNCATE `student`

          delete的truncate区别

            • 相同点:都能删除数据,都不会删除表结构
            • 不同:
              • truncate 重新设置自增列计数器会归零
              • TRUNCATE TABLE相当于无条件的DELETE FROM
              • delete 可以回滚事务
              • truncate不支持事务
              • delete 后面可以添加where条件
              • delete 删除数据会一条一条的删除,而truncate 会瞬间清空表中的所有数据。

                -- delete支持事务

                -- 开启事务

                START TRANSACTION;

                -- 从test删除所有数据

                DELETE FROM student;

                -- 从test表查询数据

                SELECT * FROM student;

                -- 回滚

                ROLLBACK;

                -- 提交

                COMMIT;

                -- truncate不支持事务

                START TRANSACTION;

                TRUNCATE table student;

                SELECT * FROM student;

                ROLLBACK;

                SELECT * FROM student;



                相关实践学习
                如何快速连接云数据库RDS MySQL
                本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
                全面了解阿里云能为你做什么
                阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
                相关文章
                |
                7月前
                |
                关系型数据库 MySQL 数据库
                数据迁移脚本优化过程:从 MySQL 到 Django 模型表
                在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
                |
                5月前
                |
                存储 关系型数据库 MySQL
                "深入探索MySQL临时表:性能优化利器,数据处理的灵活之选"
                【8月更文挑战第9天】MySQL临时表专为存储临时数据设计,自动创建与删除,仅在当前会话中存在,有助于性能优化。它分为本地临时表和全局临时表(通过特定逻辑模拟)。创建语法类似于普通表,但加TEMPORARY或TEMP关键字。适用于性能优化、数据预处理和复杂查询,需注意内存占用和事务支持问题。合理使用可大幅提升查询效率。
                313 2
                |
                5月前
                |
                canal 关系型数据库 MySQL
                "揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
                【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
                932 0
                |
                6月前
                |
                存储 SQL 关系型数据库
                MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
                MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
                |
                6月前
                |
                SQL 存储 数据库
                MySQL设计规约问题之如何处理日志类型的表
                MySQL设计规约问题之如何处理日志类型的表
                |
                7月前
                |
                关系型数据库 MySQL
                蓝易云 - 如何修复MySQL中损坏的表
                最后,为了防止数据丢失,定期备份数据是非常重要的。
                160 3
                |
                6月前
                |
                运维 关系型数据库 MySQL
                实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
                实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
                |
                7月前
                |
                SQL 关系型数据库 MySQL
                ClickHouse(23)ClickHouse集成Mysql表引擎详细解析
                ClickHouse的MySQL引擎允许执行`SELECT`查询从远程MySQL服务器。使用`MySQL('host:port', 'database', 'table', 'user', 'password'[,...])`格式连接,支持简单`WHERE`子句在MySQL端处理,复杂条件和`LIMIT`在ClickHouse端执行。不支持`NULL`值,用默认值替换。系列文章涵盖ClickHouse安装、集群搭建、表引擎解析等主题。[链接](https://zhangfeidezhu.com/?p=468)有更多
                294 0
                |
                7月前
                |
                SQL 缓存 关系型数据库
                MySQL操作全攻略:库、表、数据、事务全面指南
                MySQL操作全攻略:库、表、数据、事务全面指南
                |
                7月前
                |
                SQL 关系型数据库 MySQL
                经验大分享:MySQL(三)数据库表的查询操作【重要】
                经验大分享:MySQL(三)数据库表的查询操作【重要】
                82 0