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

文章目录

  • 前言
  • 显示数据库里的所有表
  • 创建表
  • 查看指定表结构
  • 删除表
  • 注释
  • 对表进行增删改查
    • 1.新增数据
      • 单行数据,全列插入
      • 单行数据,指定列插入
      • 多行数据插入
      • 特殊类型:时间的插入
    • 2.查询数据
      • 全列查询
      • 指定列查询
      • 查询字段为表达式
      • 别名
      • 去重
      • 查询结果排序
      • 条件查询
        • 基本查询
        • and 与 or
        • 范围查询
        • in
        • 模糊查询
        • null查询
        • 分页查询
    • 3.修改
    • 4.删除
  • 结语

前言

前面我们已经基本了解了什么是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.
2. is null 和 is not null

分页查询

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

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


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

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

3.修改

update 表名 set 列名 = 值 where 子句

4.删除

delete from 表名 where 子句

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

结语

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

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