💕每个人都有自己的一生,不要和别人去比较。比较只会让你感到沮丧和不满足。关注自己的成长和进步,并享受属于自己的旅程。 💕
🐼作者:不能再留遗憾了🐼
🎆专栏:MySQL学习🎆
🚗本文章主要内容:学习MySQL的对表操作。查看表、创建表、删除表,对表进行增删改查🚗
@[toc]
前言
前面我们已经基本了解了什么是MySQL、MySQL的发展以及MySQL的对库操作初识MySQL,那么今天我为大家分享的是MySQL中重要的对表操作。
显示数据库里的所有表
在进行表操作的之前,首先需要建立在库的基础上,因为我们的表是包含在库中的,所以我们需要先创建一个库,然后选中该库,表明对该库进行操作。
当选中库之后,使用 ==show tables== 来显示表。
因为这里我们并没有创建表,所以显示的为空
创建表
使用 ==create table 表名 (列名,类型);== 创建表。
要想创建表就需要知道MySQL的通用数据类型有哪些。
不同数据库的基本数据类型
然后我们选择合适的数据类型来创建表。
查看指定表结构
使用 ==desc 表名;== 查看指定表的表结构。
删除表
使用 ==drop table 表名== 删除表。
==注意这里删除表操作跟删除库操作一样,要十分小心,否则可能会出现很严重的问题。==
注释
MySQL跟其他编程语言都一样,都可以对源码进行注释。MySQL进行注释的方法有三种:
1.使用 ==comment== 关键字进行注释
2.使用 ==“--空格+描述”来表示注释说明== 来进行注释,- -
3.使用 ==#== 进行注释
==并且这个这个注释只是会出现在你的源代码中,不会存储到数据库中。==
对表进行增删改查
1.新增数据
单行数据,全列插入
使用 ==insert (into) 表名 values (值,值);== 新增数据,这里的into是可以省略的,但是不建议省略。
但是这里为什么会出现错误呢?很简单,因为这里默认的字符集是不支持汉字的,所以我们在创建库的时候需要指定字符集。
==平时常用的字符集包括:
gbk 两个字节表示一个汉字
utf8 三个字节表示一个汉字(更通用)==
这里 ==select * from student== 是全列查询,我们先使用,后面再分析,知道是查询列就行了。
单行数据,指定列插入
不仅如此,我们还可以指定列插入,使用 ==insert into 表名 (列名,列名) values (值,值);== 进行指定列插入。
多行数据插入
那么当我们想要插入多组数据的时候,难道我们要一组一组的添加吗?当然不是,我们可以一次添加多个数据。使用 ==insert into 表名(列名,列名) values (值,值),(值,值);== 进行多个数据的插入,可以搭配着指定列插入。
这里一次插入多个数据跟一次插入一个数据来说,效率提高了不少,因为 ==一次插入N个记录(只需要客户端和服务器交换一次);分N次插入,一次插入一个记录(需要客户端与服务器交互N次);== 客户端与服务器发生交互是需要时间的,所以一次插入多组数据大大节省了时间。特殊类型:时间的插入
当我们想要插入数据的时候,只需要注意该信息所对应的数据类型就行了,但是都是这样的吗?有一个例外:时间的插入。==时间的插入需要特定格式的字符串来插入,比如说要插入一段时间,我们需使用datetime类型,并且插入使用 '2023-05-31 23:35:30',年月日之间用' - '隔开,时分秒之间用' : '隔开,时分秒与年月日用’ ‘隔开。==
MySQL还提供了一个函数来表示当前时间。==now()== 表示当前时间。
2.查询数据
服务器会根据请求的sql查询保存的数据,把数据读取出来通过为网络返回给客户端,生成一个“临时表”(结果集)。
我们创建一个新的表来分析查询数据
全列查询
前面我们已经使用了全列查询: ==select * from 表名;== 。使用全列查询可以将表中的所有列都给显示出来。
" "叫做通配符,可以理解为扑克牌中的赖子,不考虑大小王,赖子可以代替任何牌,所以这里" "就可以理解为所有。
指定列查询
当数据量非常大的时候,使用 select * from 表名 操作可能会发生危险,因为服务器需要从数据库中短时间内读取出大量的数据,瞬间吃满硬盘带宽和网络带宽,导致其它程序无法使用硬盘或者网络。
那么我们可以只读取我们需要的列,而不是读取出所有列。
==select 列名,列名··· from 表名;==,指定列读取数据。
查询字段为表达式
在查询数据的时候,我们可以将列于列之间进行计算之后再显示出来,也可以是单列进行计算,==需要注意是列与列之间的运算,不是行与行之间的计算。==
😊 单列之间的计算
这里可能有人会问了,我创建表的时候不是定义了decimal(3,1)吗,那么这里的位数都超过3了,为什么还能显示出来呢?
答:前面我们说过我们看到的表只是一个临时表,跟数据库中的表其实并没有什么关系,所以临时表的数据类型取决于默认数据类型。
👨🦱列与列之间的计算
通过上面的图片我们可以知道,新的列名是我们进行计算的表达式。
但是我们可以看到这个列名chinese + math + english属实不好看且不直观,那么我们是否有办法可以使展示的列名好看又直观呢?
别名
使用 ==select 列名,列名 as 别名 from 表名;== 来使显示出来的列名改为我们的别名。这里的as可以省略,但还是建议不省略。
去重
我们可以使用 ==select distinct 列名 from 表名;==,来指定列进行去重,只保留一个数据。
查询结果排序
使用 ==select 列名 from 表名 order by 列名 desc(asc);== ,后面的desc表示按降序排列,asc按升序进行排列。排序查询可以结合前面的指定列查询、别名、去重和表达式查询使用。
不仅如此,查询结果排序还可以指定多个列,在这多个列中分主次地位,也就是说他们所占的权重是从大到小的。按降序排列,就算你A后面的列大于B的列,但是你前面的列B大于A,那么B就排序在A的前面。
如果两个人的数学成绩相同,那么就接着比较语文成绩,如果语文成绩也相同的话就在比较英语成绩。
条件查询
==select 列名 from 表名 where 子句;== 在查询的时候指定查询条件,符合条件的数据留下,不符合的就跳过。
在使用条件查询之前,我们需要知道MySQL中有哪些比较运算符和逻辑与算符。
🎁比较运算符
🎁逻辑运算符
基本查询
这里可能会有人问了,既然我前面的chinese + math + english已经别名为total了,那么我的where后面可以将chinese + math + english换成total吗?
答案是不可以的,我们看报错可以知道,这里根本就不认识total,这是为什么呢?我前面不是重命名了吗?那是因为 ==sql命令是先执行where条件,然后再执行前面的select语句==,所以在执行where条件的时候total并未定义。
and 与 or
and 与 or就类似于c语言和Java的&& 和 || ,是并且和或者的意思。
🎁and
🎁or
范围查询
==between A and B== ,查询出数据在A到B之间的数据,注意这里的范围是左闭右闭,A <= C <= B
in
如果我们需要查询出数学成绩为65、84、85的同学,该怎么办呢?我们可以使用 or 。
如果数据少的话,我们这样写倒无所谓,但是如果数据多的时候呢?我们难道也是一个or一个or写吗?很显然是不方便的,所以就有 in 来解决这个问题。
模糊查询
当我们需要找出姓孙的人,而不是每一个具体的人时,我们就可以使用模糊查询。MySQL的模糊查询是使用 ==like== 关键字,用 ==%== 代表任意0个或者N个字符, ==_== 代表1个字符。
🎁 % 表示1个或者多个字符
🎁 _ 表示1个字符
null查询
如果我们需要查询出没有考试数学的人也就是数学成绩为null的人怎么办?
根据上面的图我们可以知道,通过' = '来判断是否为null是不行的,那么我们应该如何判断null呢?
==1. <=>
- is null 和 is not null==
分页查询
当表中的数据太多的时候,如果我们将他从全部展现出来的时候,不光人看不过来,系统方面的压力也是特别大的,那么我们应该如何解决呢?
这个分页我们都见过吧,就是如此,我们每个表出现的数据可以使用 ==limit== 来限制数据的个数。
limit当然也可以搭配前面的几种查询使用。
limit还可以搭配offset使用,查询从第几个开始的几个数据。
3.修改
==update 表名 set 列名 = 值 where 子句==
4.删除
==delete from 表名 where 子句==
==记住这里的where条件要设置好,如果没有where和limit限制,那么这个表中的数据都会被删除,只剩下一个空表了。==
结语
MySQL数据库的每一个操作都是很危险的,大家在操作的时候一定要小心再小心,如果你的操作失误并且sql命令执行时间较长的时候,可以及时使用按CTRL+C取消命令,这样可以尽量降低损失。
最后,祝大家儿童节快乐,在这个六一儿童节,愿你们的内心依然保持着童真,享受着生活的美好,永远拥有一个快乐的童年!