【MySQL系列】第二节.MySQL表的增删改查(基础)

 作者简介:大家好,我是未央;

博客首页:未央.303

系列专栏:Mysql系列

每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!

文章目录

前言

一、CRUD

二、新增(Create)

2.1单行数据,全列插入

2.2单行数据,指定列插入

2.3插入多组数据输入

2.4多组数据+指定列插入

三、查询(retrieve)

3.1 全列查询

3.2 指定列查询

3.3 查询字段为表达式 

3.4 查询的时候起别名(as)

3.5 去重查询(distinct)

3.6 排序查询(order by)

3.7 条件查询(where)

3.8 分页查询(limit...offset...)

四、修改(update)

五、删除(delete)

六、总结



前言

今天我们将进入到.MySQL表的增删改查(基础)的章节,本章节主要介绍了.MySQL表的增删改查中的一些基础的操作,对于我们学习MySQL有着重要的意义,并且其中有很多需要注意的地方,我也会详细标准,防止各位踩坑,接下来就让我们进入到.MySQL表的增删改查(基础)学习!!!!!!!!!!!

一、CRUD

定义增加(Create)查询(Retrieve)更新(Update)删除(Delete)四个单词的首字母缩写

MySQL的工作就是 组织管理数据,即 需要先保存,保存好了 后续好进行增删改查

二、新增(Create

2.1 单行数据,全列插入

语法格式:

insert  into  表名  values(值,值,值......)

注意:

1.insert 和 values 都是关键字

2.插入的值可以有若干个,值的个数 要和 表的列数 相匹配;值的类型 需要和 列的类型 相匹配

举例说明:在已经创建好的表student中插入元素(1.’zhangsan')

已经建好的表student和他的结构如图;

 往里面插入元素(1.’zhangsan');

                                                                                                                                                  

此时,插入数据成功

需要注意的是,在SQL中表示字符串,可以用单引号,也可以用双引号,它们是等价的关系;SQL里没有 字符类型

插入失败的几种情况;

1.当值的个数要和表的列数不相匹配时;

 2.值的类型 需要和 列的类型不相匹配

3.对于想要插入中文数据时

 此处需要修改MySQL的配置

注意:

如果有刚刚使用 MySQL数据库 的小伙伴,啥都没有设置

会发现,如果插入的数据是中文的话,那么都会插入数据错误

我的这个中文数据插入成功,是因为在之前已经配置好了 


2.2 单行数据,指定列插入

语法格式:


insert into 表名(列名1,列名2,列名3,......) values (值1,值2,值3,......);

举例说明:在创建好的表student中指定name列插入'lisi';

                                                                                                                                               指定了 name 这一列进行插入‘lisi’;

                                                                                                                                             

其他未被指定的列(id),填入的值就是这一列的默认值默认的默认值就是啥也不填,也就是NULL;


2.3 插入多组数据输入

insert 语句还可以一次插入多条记录

说白了,就是 在values后面,带有多组(),每个()之间采用,来进行分割;

语法格式:

insert into 表名 values (值1,值2...), (值3,值4...), (值5,值6...)

举例说明:在创建好的表student插入多组记录(1,‘zhangsan’),(2,‘lisi’);


2.4 多组数据+指定列插入

将上述2.2,2.3方法结合在一起即可;

语法格式:

insert into 表名(列名1,列名2,列名3,...) values (值1,值2,...),(值3,值4,...),...; 

举例说明:在创建好的表student中指定id,name两列插入‘1’,‘张三’;‘2’,’李四‘;’3‘,‘王五’。

 注意:

在MySQL里面,"一次插入一条记录,分多次插入" 相比于 "一次插入多条记录" 来说,要慢上很多

                                                                                                                                               

                                                                                                                                               

如果要是"一次插入一条,分多次来插入",就会有多个 请求/响应;

如果要是"一次插入多条记录",就一个 请求/响应 就够了

                                                                                                                                               

另外一方面,MySQL服务器方面,是通过一系列的复杂的数据结构来组织数据的,

每一次的插入操作其实都是比较耗时的(在数据结构中进行一定的便利操作 找到合适的位置)

                                                                                                                                               

如果是"一次插入一条,分多次来插入",服务器这边的准备工作就要准备多次;

如果要是"一次插入多条记录",服务器准备工作就只需要做一次就可以了  

三、查询(retrieve)

查询是MySQL中最最重要也是最最复杂的操作;

接下来我们就介绍查询的多种类型:

3.1 全列查询

定义:全列查询顾名思义就是直接把整个表的数据都查询出来;

语法格式:

select * from 表名;

注意:*是通配符,表示匹配任意的列(所有的列)

例如;查询创建好的表student;

ps:

此操作就把student表全都构建出来了

但是实际上这是一个"临时表",这个表格并不是 服务器上数据的本体

                                                                                                                                                  

                                                                                                                                                 

这里就会出现一个关键性的问题:
如果当前数据库里面的数据特别多,那么 执行上述 select * 会发生什么情况呢?

服务器需要先读取磁盘,把这些数据都查询出来,再通过网卡把数据传输给客户端

                                                                                                                                               

由于数据量非常大,极有可能把磁盘IO吃满,或者把网络带宽吃满

直观感受:卡(会卡多久不知道......)

如果当前操作的数据库是生产环境的服务器,因为 select * 就可能导致生产环境服务器卡顿,从而影响外面用户的使用体验

万一真的执行了这个操作的话,赶紧按住 ctrl+c 取消操作!!!

                                                                                                                                                  

执行一些SQL的时候如果执行的时间比较长,随时可以按 ctrl+c 来中断

在控制台执行,ctrl+c 一般都是有效的;在图形化界面上,ctrl+c 是否还是有效,那就不清楚了                                                                                                                                


3.2 指定列查询

定义:就是指定你想要查询某一(一部分)列单独进行查询;

语法格式:

select 列名,列名,列名.... from  表名;

举例:在表student中单独查询id列;

ps:

当我们省略掉一些不必要的列的时候,就可以节省大量的磁盘IO和网络带宽了

                                                                                                                                                   MySQL是客户端/服务器结构的程序,在此处看到的结果这张表,同样也是"临时表",只是在客户端这里显示成了这个样子,而不是说服务器上 就真的有一个这样的 里面只存了id 的这张表                                                                                                                                                                                                                                                                                              注意:  select所有的操作的结果都是"临时表",可能会把显示在客户端上的结果进行了加工,但是不会影响到数据库服务器原有的数据


3.3 查询字段为表达式

   定义:即让查询结果带有一些计算;

注意:表达式查询,这里进行的计算,都是列和列之间的计算,而不是行和行之间的计算

举例说明:

1.先创建一个表exam_result;

注意:decimal(3,1):

成绩得要是 90.5或88.8这样的形式,形如100、5.23这样的形式其实就是非法字符

2. 查看这个表的结构:

3.接下来我们插入一些数据:

4.我们查看此时 表exam_result中的结构;

5.此时我们进行操作让每个人的语文成绩增加10分’;

注意:

                                                                                                                                                   

ps1:

如果说,加的数字超过了decimal(3,1)的限制会怎么样呢?

答案是,不会怎么样

                                                                                                                                                  

得到的结果是"临时表","临时表"的列的类型并不是严格和原有表的类型一致

"临时表"会尽可能的保证显示结果是正确的

                                                                                                                                                                                                                                                                                                     当我们操作让每个人的语文成绩增加20分’;

                                                                                                                                                但是  尝试往原始的表中插入一个超出范围的数据,那是不可以的

                                                                                                                                                  

ps2:                                                                                                                                        

如果尝试把 字符串 和 数字 进行算术运算,就可能会报错,也可能会出现警告:

                                                                                                                                                  

可以使用 show warnings 查看警告的详细情况


3.4 查询的时候起别名(as)

定义:会发现"临时表"中 显示的列名 会非常特别的长,很不好看,也并不直观

此时就可以通过取别名的方式来消除这种困扰;

语法格式:

原名+as+别名;

  

所以我们将其用total别名来表示;

注意:

当然,as也可以省略,不过个人建议还是写上最好;

不写as的时候,不一定能看清楚


3.5 去重查询(distinct)

定义:顾名思义就是去掉表名中重复的列名;

语法格式:

select distinct 列名 from 表名;

举例说明:去掉数学成绩列中重复的列名

1.先查看每个人的数学成绩;

                                                                                                                                                  

2. 此时采用去重查询;


3.6 排序查询(order by)

定义:排序查询,在查询过程中,对于查询到的结果,进行排序

注意:这里的"排序",针对的只是"临时表",对于数据库上原来存储的数据没有影响

语法格式:

select 列名 from 表名 order by 列名 asc/desc;

ps:
asc表示升序查询;

desc表示降序查询;(descending缩写)

举例:我们可以把 exam_result表 按照 chinese的成绩顺序 升序或者降序排序: 

 ps:

如果数据中存在NLUU的话,则当成最小值;

 扩展1:order by 也可以针对带有别名的表达式进行排序:

扩展2:order by 进行排序的时候,还可以指定多个列来进行排序!!!

当指定多个列排序的时候

就相当于:如果第一列不分胜负(数据相同),再按照第二列进行比较.

先按照 math 成绩降序排序,有 math 成绩一样的,按照 chinese 成绩升序排序


3.7 条件查询(where)

定义所谓条件查询就是按照指定的条件进行筛选,查询;

语法格式:

select 列名 from  表名 where 条件;

常见的条件:

                                                                                                                                                   1.条件运算符;

                                                                                                                                                  2.   逻辑运算符

                                                                                                                                                  

举例说明:

1.查询英语成绩不及格的同学姓名及其英语成绩

 2.查询语文成绩比英语成绩好的同学

3.查询总分在200以下的同学

注意:

这句查询是没有问题的,可是 当我们在条件查询中 使用了别名时: 

 故可知:即 条件查询不允许使用别名


3.8 分页查询(limit...offset...)

定义:

分页查询,让查询的结果,只取其中的一个部分

从而能够降低开销,加快查询速度

语法格式:

select 列名 from 表名 limit N offset M;

注意:

1.使用 limit 关键字来限制返回的结果条数(说白了 就是显示形成的"临时表"里面有多少条记录)

2.使用 offset 关键字来确定从第几条开始进行返回

3.其中M表示从第M条开始查询N表示最多返回N条记录                                                      (其中M为0时,表示从第1条开始查询,类似数组下标)

4.上面的 offset M 可以省略如果省略的话,表示从一开始的记录开始返回

select 列名 from 表名 limit N;

举例说明:

1.直接查询整个 exam_result表的前3条记录;

2. 查询整个 exam_result表中id为456的记录;

 3.当然 如果不足的话,有几条记录 就返回(显示)几条记录:

一共有9条记录:

执行以下命令行:

从第9条记录开始,虽然说需要显示3条记录,但是不够了,所以只能显示1条记录 

ps:

limit 是可以和order by,where等子句搭配使用的

查询总成绩前三名的同学的信息

四、修改(update)

定义:

此处的修改,是针对数据库服务器进行的了,这里的修改是持续有效的

也就是说,这里的修改使磁盘上面保存的内容也变了,后面再怎么查询,也只是变化后的查询结果了(与前面临时表进行区分)

语法格式:​​​​​​

update 表名 set 列名 = 值1 (,列名 = 值2,...) where 子句;

实质:针对哪个表的 哪些行 哪些列,改成啥样的值;

举例说明:

1.把表exam_result 中"孙悟空"同学 的数学成绩改为80分;

查询可得:

 2.将"曹孟德"同学的数学成绩变更为60分,语文成绩变更为70分

 查看可得:

3.将总成绩倒数前3的同学的数学成绩减去30分

总成绩最差先找出来:

                                                                                                                                                                                                                                                                                                    

原先,他们三个人的math成绩:

                                                                                                                                                                                                                                                                                                   

                                                                                                                                                 

 现在,把他们的成绩改一下:

ps:

update 后面的条件很关键

修改操作,是针对条件修改之后,剩下的数据进行修改

换句话说,如果没写条件,意位着就是针对所有行都进行修改

                                                                                                                                                                                                                                                                                                    举例:当未指出update后面的条件时;

                                                                                                                                                                                                                                                                                                     发现对所有的Chinese都变成0;

五、删除(delete)

定义:删除语句 是最最简单的,但又是最最危险的语句。

语法格式:

delete from 表名 where 条件;

一般用于删除符合条件的行;

举例说明:

1.删除唐三藏同学的相关记录;

 

注意:

如果没有条件的话,即 delete from 表名;

意味着就把表里面的数据全部都删了,意味着只剩下一个空的表;

 此处就直接把exam_result表里面的数据给删除完了; 

六、总结

今天我们对于MySQL的增删改查(基础)就介绍到这里,这里面知识点覆盖很多,并且需要注意的地方也有很多,需要我们认真的进行学习,以及及时进行相关的复习;

下一节我们将进入MySQL表的增删改查(进阶),内容也会越来越复杂,让我们一起学习并且充分掌握这些知识,一起加油!!!!!希望能得到各位的点赞,关注!!!!

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值