MySQL数据库操作-2

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

MySQL数据库操作-1

https://developer.aliyun.com/article/1517096


查询结果去重

例如:

a96773dbd0225850d10791e6dd4bbca6_b71618bea81e4f838a77de322483e67c.png


里面有221分的重复项,使用distinct关键字,如下


select distinct math + chinese + english as 总分 from exam_result;

070154eab518fe5ba6ee4a68d86d6370_b03c6bb7c7ad4e34948ac7b1e347da40.png

他会把重复的去掉,只留下一个数据.


如果distinct指定多个列的话,则这些列的值都相同,才视为重复.

查询结果排序

单权重

使用order by 来对查询结果排序.可能是升序~~也可能是降序~~

例如,存在以下表:


以math的数据为权重,来对查询结果进行一个排序:


select id, math from exam_result order by math;

默认升序(从上往下递增)

cbd7532b43f7802c18ad936335b6de6e_0c5b558c2385475e9cf65bf942fb3a73.png


或者在order by 权重 后面加一个 desc(descend)来让它以降序排序:


select*from exam_result order by math desc;

还可以使用asc表示升序.


但是,如果在查询的时候没有指定使用order by,则此时的查询结果的顺序时不可预期的.


多权重

如果一个order by 权重后面还有一个权重,形如:


select*from 表名 order by weight1, weight2, weight3.....

那么,排序就会先按照weight1的权重进行升序或者是降序排序,如果weight1这一列里面有相同的数据,那么这些相同的数据会根据weight2的权重进行升序或者是降序排序....以此类推.


条件查询

在筛选,查询的过程中指定查找的条件(符合条件的数据留下,不符合的去除)


描述条件

MySQL中使用一系列的运算符,搭配where来描述:

比较运算符

运算符

说明

< <= > >=

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

=

等于,NULL不安全,NULL = NULL的结果为NULL

<=>

等于,NULL安全,NULL <=> NULL结果为TRUE(1)

between a0 and a1

范围匹配,[a0, a1], a0 <= value <= a1, 返回TRUE(1)

in(ex1,ex2,ex3, ..... )

如果数据属于ex1,ex2,ex3,......其中任意一个,返回TRUE(1)

is NULL

是空(NULL)

is not NULL

不是空(NULL)

like

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


不支持+=运算符


例如:查找英语分数<60的人


select*from exam_result where english < 60;

67e76e49e28de2c9a1d04e3e0713d559_2302952890294dcfb30157cacb056391.png

相当于对当前表进行遍历,取出每一条数据,看条件是否满足如果满足,这个记录就会被保留,作为结果集的一部分,否则这个记录就不会被记录,然后继续遍历下一个数据.


也可以直接拿两个列进行比较:


select*from exam_result where math > chinese;

06f79549c1a7ee80368f2fc1a4ee7dc7_7e5c4693ee854dda840477939d643fbd.png

但是要注意null的比较,例如:

72f5d8ca8924ad4d3f3f7f8bb9294a72_aee94071cd03453792236fb10698ffb2.png


如果使用=对含有null的表达式进行比较,结果还是null => 相当于false,其数据就不会被记录


所以要使用<=>来比较含有null的数据,例如 null <=> null 结果为true;


逻辑运算符

运算符

说明

and

多个条件都为TRUE(1),结果才为TRUE(1)

or

任意条件为TRUE(1),结果才为TRUE(1)

not

条件为TRUE(1),结果为FALSE(0)



注意:and 和 or 存在一个优先级问题, and 的优先级 > or 的优先级,所以先执行and ,后执行or


例如:


select*from exam_result where chinese > 80 and english > 80;

select*from exam_result where chinese > 80 or math > 80;


比较或者逻辑运算中的表达式查询

例如


select*from exam_result where math + chine + english< 250;

d667ccda7764901ce0af1289f31d0ba9_c7e74f846648443b848cafc2071d12c7.png

但是,条件查询里面的比较的对象不能是前面数据的小名,例如:


select id, math + chinese + english as total from exam_result where total < 250;


写下一个sql不是从前往后的执行, 执行顺序是有特殊规定的:

69d0f4d26c4f9fb09e1e95f134b338d5_d07b82a0ebca4109861af8d2e38b7c54.png

  1. 遍历每一行


  1. 把这一行带入到where后面的条件判断里面去


  1. 符合条件的结果,再根据select指定的列,进行查询/计算.


模糊查询

不要求元素完全相同,只要满足一定的规则就可以了,正则表达式就是模糊匹配的典型实现.


like支持两个用法:


  • 使用 %表示0个或者n个字符,例如 '张%'就是匹配所有以张开头的数据,如果是'张三%',就匹配所有以张三开头的数据.同理'%张'是查询以'张'结尾的数据.若是'%张%',则是查询包含'张'的数据.


  • 使用 _ 代表任意一个字符,例如'张_' ,就会匹配张开头,后面_可以代表任意的字符


例如:

6b34dd4b6862c28ee93924e68397d0f3_7059ab085e8545ed8e5dcdeb0e33e7c6.png


select*from exam_result where name like '张%';

查询name中以'张'开头的数据有哪些


select*from exam_result where name like '张_';

85c89d4256efcdbaef33c875eaa0051e_567a0771aa824082be607d9bf17a1d4c.png

分页查询

有时候数据量太大了,大量数据在一页里面显示, 查看者难免有时候会看不过来, 一方面系统压力也比较大,所以就设置了分页查询,这也是我们生活中经常看到的例子,如下:

对于一个表:

f5fbb29dbd3d152203038b66a04403b2_7f6efd9c531041f2850d9a28f9ab85f0.png


如果我只想看前三条,该怎么办?使用:


select * from exam_result limit 3;

4914f9ab885e520e3601f49ce92e14b4_188b503f6e1349679c1211b8a64a9ca5.png

如果需要选定某几条,可以使用offset来改变偏移量,可以类比数组,第一行数据的下标为0,第二行的数据下标为1,.....以此类推:


select * from exam_result limit 3 offset 1;

bbdddf69acaec805fee08cf75a1df3d4_e75986a26b3b44aa9ce0dd99114f7646.png

这种写法等价于:


select * from exam_result limit 1,3;

存在表:

使用update关键字来修改:


update 表名 set value1 = xx, value2 = xx, value3 =xx, ... where 条件


例如:


update exam_result set chinese = 60, math = 60, english = 60 where name = '张三';

结果如下:

045a118817c635bd7ee739d1f0df7bf5_78cfb94ad0024c87b0901633a3fa4791.png


但是如果加30之后超过了math的decimal(4,2)的范围,就会出现out of range 的异常


若对表中的chinses数据减半操作如下:


update exam_result set chinese = chinses / 2;

238331702dd495e3c2effc5e3a48c398_2915cc6b4fac4928b339bc564b87f3da.png

但是下面的执行结果出现了:


30040105d71100af56d221311bf07b7b_872569b2949b4886a0a78d5d41af08e7.png

其中包含一个warnings


使用:show warnings; 来显示错误


结果如下:

6da04990f66ac6328e46ea445f5567d9_f7c7d58b8ad5406b8c367ee016f769de.png


Message:Data truncated for column 'chinses' at row 2;

意为数据截断,小数点后面不够用了,只能截断.错误出现在第二行


正常来讲,60.5 / 2 的结果为30.25,但是由于decimal(3,1)只能保留小数点一位,而0.25有两位小数,所以发生了截断,其中的0.05被直接舍弃.


注意:update这个操作非常危险!!!


使用delete,意为删除,是按照行(记录)来删除的.

delete from 表名 where 条件;

例如:


delete from exam_result where math <=> null;

b62e4d11a03f6ffcef192b1253c085af_e992b05632cd4db8bdd28dc2dde68992.png


同时也可以搭配like(模糊匹配);


直接删除表中的所有数据:


delete from 表名;

这种情况表还存在,但是表中的数据已经全部清除了.

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
79 4
|
6月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
78 0
|
7月前
|
关系型数据库 MySQL
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
46 1
|
6月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
56 2
|
6月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
76 0
「Python入门」python操作MySQL和SqlServer
|
6月前
|
SQL 存储 关系型数据库
|
7月前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。