MySQL秘籍:让你的表操作炉火纯青

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 详细介绍MySQL表操作

💕每个人都有自己的一生,不要和别人去比较。比较只会让你感到沮丧和不满足。关注自己的成长和进步,并享受属于自己的旅程。 💕
🐼作者:不能再留遗憾了🐼
🎆专栏:MySQL学习🎆
🚗本文章主要内容:学习MySQL的对表操作。查看表、创建表、删除表,对表进行增删改查🚗

@[toc]

前言

前面我们已经基本了解了什么是MySQL、MySQL的发展以及MySQL的对库操作初识MySQL,那么今天我为大家分享的是MySQL中重要的对表操作。

显示数据库里的所有表

在进行表操作的之前,首先需要建立在库的基础上,因为我们的表是包含在库中的,所以我们需要先创建一个库,然后选中该库,表明对该库进行操作。

image.png

当选中库之后,使用 ==show tables== 来显示表。

image.png

因为这里我们并没有创建表,所以显示的为空

创建表

使用 ==create table 表名 (列名,类型);== 创建表。

要想创建表就需要知道MySQL的通用数据类型有哪些。
image.png

不同数据库的基本数据类型
image.png

然后我们选择合适的数据类型来创建表。
image.png

查看指定表结构

使用 ==desc 表名;== 查看指定表的表结构。

image.png

image.png

删除表

使用 ==drop table 表名== 删除表。
image.png

==注意这里删除表操作跟删除库操作一样,要十分小心,否则可能会出现很严重的问题。==

注释

MySQL跟其他编程语言都一样,都可以对源码进行注释。MySQL进行注释的方法有三种:
1.使用 ==comment== 关键字进行注释
2.使用 ==“--空格+描述”来表示注释说明== 来进行注释,- -
3.使用 ==#== 进行注释

image.png

image.png

==并且这个这个注释只是会出现在你的源代码中,不会存储到数据库中。==

对表进行增删改查

1.新增数据

单行数据,全列插入

使用 ==insert (into) 表名 values (值,值);== 新增数据,这里的into是可以省略的,但是不建议省略。

image.png

但是这里为什么会出现错误呢?很简单,因为这里默认的字符集是不支持汉字的,所以我们在创建库的时候需要指定字符集。
==平时常用的字符集包括:
gbk 两个字节表示一个汉字
utf8 三个字节表示一个汉字(更通用)==

image.png

image.png

这里 ==select * from student== 是全列查询,我们先使用,后面再分析,知道是查询列就行了。

单行数据,指定列插入

不仅如此,我们还可以指定列插入,使用 ==insert into 表名 (列名,列名) values (值,值);== 进行指定列插入。

image.png

多行数据插入

那么当我们想要插入多组数据的时候,难道我们要一组一组的添加吗?当然不是,我们可以一次添加多个数据。使用 ==insert into 表名(列名,列名) values (值,值),(值,值);== 进行多个数据的插入,可以搭配着指定列插入。

image.png

这里一次插入多个数据跟一次插入一个数据来说,效率提高了不少,因为 ==一次插入N个记录(只需要客户端和服务器交换一次);分N次插入,一次插入一个记录(需要客户端与服务器交互N次);== 客户端与服务器发生交互是需要时间的,所以一次插入多组数据大大节省了时间。

特殊类型:时间的插入

当我们想要插入数据的时候,只需要注意该信息所对应的数据类型就行了,但是都是这样的吗?有一个例外:时间的插入。==时间的插入需要特定格式的字符串来插入,比如说要插入一段时间,我们需使用datetime类型,并且插入使用 '2023-05-31 23:35:30',年月日之间用' - '隔开,时分秒之间用' : '隔开,时分秒与年月日用’ ‘隔开。==

image.png

image.png

MySQL还提供了一个函数来表示当前时间。==now()== 表示当前时间。
image.png

2.查询数据

服务器会根据请求的sql查询保存的数据,把数据读取出来通过为网络返回给客户端,生成一个“临时表”(结果集)。

我们创建一个新的表来分析查询数据
在这里插入图片描述
在这里插入图片描述

全列查询

前面我们已经使用了全列查询: ==select * from 表名;== 。使用全列查询可以将表中的所有列都给显示出来。

" "叫做通配符,可以理解为扑克牌中的赖子,不考虑大小王,赖子可以代替任何牌,所以这里" "就可以理解为所有。

image.png

指定列查询

当数据量非常大的时候,使用 select * from 表名 操作可能会发生危险,因为服务器需要从数据库中短时间内读取出大量的数据,瞬间吃满硬盘带宽和网络带宽,导致其它程序无法使用硬盘或者网络。

那么我们可以只读取我们需要的列,而不是读取出所有列。
==select 列名,列名··· from 表名;==,指定列读取数据。
image.png

查询字段为表达式

在查询数据的时候,我们可以将列于列之间进行计算之后再显示出来,也可以是单列进行计算,==需要注意是列与列之间的运算,不是行与行之间的计算。==

😊 单列之间的计算
image.png

这里可能有人会问了,我创建表的时候不是定义了decimal(3,1)吗,那么这里的位数都超过3了,为什么还能显示出来呢?
答:前面我们说过我们看到的表只是一个临时表,跟数据库中的表其实并没有什么关系,所以临时表的数据类型取决于默认数据类型。

👨‍🦱列与列之间的计算
image.png

通过上面的图片我们可以知道,新的列名是我们进行计算的表达式。
但是我们可以看到这个列名chinese + math + english属实不好看且不直观,那么我们是否有办法可以使展示的列名好看又直观呢?

别名

使用 ==select 列名,列名 as 别名 from 表名;== 来使显示出来的列名改为我们的别名。这里的as可以省略,但还是建议不省略。
image.png

去重

我们可以使用 ==select distinct 列名 from 表名;==,来指定列进行去重,只保留一个数据。

image.png

查询结果排序

使用 ==select 列名 from 表名 order by 列名 desc(asc);== ,后面的desc表示按降序排列,asc按升序进行排列。排序查询可以结合前面的指定列查询、别名、去重和表达式查询使用。

image.png

不仅如此,查询结果排序还可以指定多个列,在这多个列中分主次地位,也就是说他们所占的权重是从大到小的。按降序排列,就算你A后面的列大于B的列,但是你前面的列B大于A,那么B就排序在A的前面。

image.png

如果两个人的数学成绩相同,那么就接着比较语文成绩,如果语文成绩也相同的话就在比较英语成绩。

条件查询

==select 列名 from 表名 where 子句;== 在查询的时候指定查询条件,符合条件的数据留下,不符合的就跳过。

在使用条件查询之前,我们需要知道MySQL中有哪些比较运算符和逻辑与算符。

🎁比较运算符
image.png

🎁逻辑运算符
image.png

基本查询

image.png

image.png

这里可能会有人问了,既然我前面的chinese + math + english已经别名为total了,那么我的where后面可以将chinese + math + english换成total吗?
image.png

答案是不可以的,我们看报错可以知道,这里根本就不认识total,这是为什么呢?我前面不是重命名了吗?那是因为 ==sql命令是先执行where条件,然后再执行前面的select语句==,所以在执行where条件的时候total并未定义。

and 与 or

and 与 or就类似于c语言和Java的&& 和 || ,是并且和或者的意思。
🎁and
image.png

🎁or
image.png

范围查询

==between A and B== ,查询出数据在A到B之间的数据,注意这里的范围是左闭右闭,A <= C <= B

image.png

in

如果我们需要查询出数学成绩为65、84、85的同学,该怎么办呢?我们可以使用 or 。
image.png

如果数据少的话,我们这样写倒无所谓,但是如果数据多的时候呢?我们难道也是一个or一个or写吗?很显然是不方便的,所以就有 in 来解决这个问题。
image.png

模糊查询

当我们需要找出姓孙的人,而不是每一个具体的人时,我们就可以使用模糊查询。MySQL的模糊查询是使用 ==like== 关键字,用 ==%== 代表任意0个或者N个字符, ==_== 代表1个字符。
🎁 % 表示1个或者多个字符
image.png

🎁 _ 表示1个字符
image.png

null查询

如果我们需要查询出没有考试数学的人也就是数学成绩为null的人怎么办?

image.png

根据上面的图我们可以知道,通过' = '来判断是否为null是不行的,那么我们应该如何判断null呢?
==1. <=>

  1. is null 和 is not null==
    image.png

分页查询

当表中的数据太多的时候,如果我们将他从全部展现出来的时候,不光人看不过来,系统方面的压力也是特别大的,那么我们应该如何解决呢?
image.png

这个分页我们都见过吧,就是如此,我们每个表出现的数据可以使用 ==limit== 来限制数据的个数。

image.png

limit当然也可以搭配前面的几种查询使用。
image.png

limit还可以搭配offset使用,查询从第几个开始的几个数据。
image.png

3.修改

==update 表名 set 列名 = 值 where 子句==
image.png

4.删除

==delete from 表名 where 子句==
image.png

==记住这里的where条件要设置好,如果没有where和limit限制,那么这个表中的数据都会被删除,只剩下一个空表了。==

结语

MySQL数据库的每一个操作都是很危险的,大家在操作的时候一定要小心再小心,如果你的操作失误并且sql命令执行时间较长的时候,可以及时使用按CTRL+C取消命令,这样可以尽量降低损失。

最后,祝大家儿童节快乐,在这个六一儿童节,愿你们的内心依然保持着童真,享受着生活的美好,永远拥有一个快乐的童年!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 关系型数据库 MySQL
MySQL 处理大数据表的 3 种方案,写的太好了,建议收藏!!
MySQL 处理大数据表的 3 种方案,写的太好了,建议收藏!!
658 0
|
28天前
|
SQL 关系型数据库 MySQL
"Python与MySQL的浪漫邂逅:一键掌握增删改查,开启你的数据库编程之旅!"
【8月更文挑战第21天】Python因其简洁的语法和强大的库支持,成为连接数据库的首选工具。本文介绍如何使用Python连接MySQL数据库并执行基本操作。首先需安装`mysql-connector-python`库。通过配置连接信息建立数据库连接后,可利用`cursor.execute()`执行SQL语句进行数据的增删改查,并通过`commit()`提交更改。查询时使用`fetchall()`或`fetchone()`获取结果。记得处理异常及关闭连接以释放资源。掌握这些基础,有助于高效进行数据库编程。
27 0
|
4月前
|
关系型数据库 MySQL 数据库
【MySQL探索之旅】数据表的基本操作(附带思维导图)
【MySQL探索之旅】数据表的基本操作(附带思维导图)
|
4月前
|
SQL 关系型数据库 MySQL
Mysql基础第六天,使用Mysql
Mysql基础第六天,使用Mysql
25 0
Mysql基础第六天,使用Mysql
|
4月前
|
SQL 关系型数据库 MySQL
MySQL必知必会:第十六章《创建高级联结》
MySQL必知必会:第十六章《创建高级联结》
|
关系型数据库 MySQL 数据库
【MySQL】一文带你学透函数
嗨咯!各位小伙伴好呀!今天我们来学习MySQL数据库新的一个章节就是函数了,函数在整个MySQL数据库中是非常重要的,比如求学生各科的平均成绩,求班级里边学生的人数。下面让我们进入函数的世界吧!
87 1
|
SQL 存储 关系型数据库
15天学习MySQL计划-索引(进阶篇)第七天(下)
15天学习MySQL计划-索引(进阶篇)第七天
93 0
|
存储 SQL 算法
15天学习MySQL计划-索引(进阶篇)第七天(上)
15天学习MySQL计划-索引(进阶篇)第七天
103 0
|
存储 SQL 缓存
15天学习MySQL计划-数据库引擎(进阶篇)第六天
15天学习MySQL计划-数据库引擎(进阶篇)第六天
86 0