相关推荐recommended
「MySQL」增删查改
作者:mmseoamin日期:2024-04-27

🎇个人主页:Ice_Sugar_7

🎇所属专栏:数据

🎇欢迎点赞收藏加关注哦!

增删查改

  • 🍉新增
    • 🍌创建表
    • 🍌插入记录
    • 🍉查询
      • 🍌查询方式
      • 🍌分页查询
      • 🍉修改
      • 🍉删除

        在操作数据库中的表时,需要先使用该数据库:

        use database;
        

        🍉新增

        🍌创建表

        先用 use 指定一个数据库,然后使用 create 新增一个表

        比如建立一个学生表

        mysql> use goods;
        mysql> create table student(
            -> name varchar(4),
            -> age int,
            -> grade decimal(3,1)
            -> );
        

        通过desc + 表名来查看表结构:

        「MySQL」增删查改,在这里插入图片描述,第1张

        其中的 name、age、grade 就是列(MySQL中的列就是我们平时所说的行);Field、Type 等就是行,其中 Null 中的Yes 表示该列可以为空,如果是 NO 则不可为空,Default 表示该列的默认值

        表中各行所表示的含义如下:

        「MySQL」增删查改,在这里插入图片描述,第2张


        🍌插入记录

        创建好表之后,使用 insert into 表名 values(列名 列名...) 来插入记录:

        mysql> insert into student values("张三",20,98.5);
        

        这里我们把所有列名都插入了,我们也可以指定插入部分列名,只需在表名后面加上要插入的列名就 ok 了:

        mysql> insert into student(name,grade) values("李四",90);
        

        插入后查看表

        「MySQL」增删查改,在这里插入图片描述,第3张

        可以看到 age 那里是 NULL,它表示这条记录的这一列为空

        我们现在是一条一条地插入,其实也可以一次插入多条记录:

        mysql> insert into student values("王五",25,80),("赵六",24,85);
        

        「MySQL」增删查改,在这里插入图片描述,第4张

        一次插入10个数据比一次插入一个数据,分10次完成的效率高

        因为每条 sql 都会涉及到下面的交互过程:

        「MySQL」增删查改,在这里插入图片描述,第5张

        • 如果分 10 条 sql 进行,那意味着在这个过程中,就会有10次网络交互

          数据库服务器收到请求之后,也要进行 10 次对应的处理,比如检查语法、数据校验、把你要插入的数据的位置在硬盘上进行定位…

        • 如果只用 1 次完成,虽然单次消耗的时间会更长,但是网络开销、服务器检查的开销都是一份的,这个做法会更高效一些


          🍉查询

          🍌查询方式

          可以通过 select * from 表名 查询到表中所有数据,比如上面就是通过这条语句来查看数据的

          也可以使用select 列名,列名 from 表名来查看指定列的信息

          注意:在公司的生产环境服务器上,不要随便敲select* !!!因为数据量很大的话,这个操作会产生大量的硬盘IO和网络IO,可能把硬盘或网卡的带宽给吃满了

          而一旦带宽吃满,此时服务器就无法正常响应其他客户端的请求(在其他客户端的视野中,就会认为MySQL服务器是挂了)

          除了上面两种查询方式,我们还可以使用表达式查询

          就是在查询过程中,指定表达式,把查询出来的每一行,都代入到表达式中进行运算

          比如下面的grade-10就是一个表达式

          「MySQL」增删查改,在这里插入图片描述,第6张

          进行表达式查询时,并没有修改硬盘中存储的数据,只是在查询结果的基础上进行运算,得到一份"临时表",也就是说 select 进行的任何操作都不会修改数据本体

          此时查询出来的临时表,为了保证数据的正确性,每个列的类型不再受限于原始表

          比如给所有学生的成绩加10

          「MySQL」增删查改,在这里插入图片描述,第7张

          虽然 grade 限定位数为 3 ,但是为了使数据不会出错,所以临时表不会限制位数

          查询操作结束后,临时表中的数据就会消散了

          到这里我们介绍了三种查询方式:

          ①查询所有数据

          ②查询指定列数据

          ③表达式查询

          还有四种查询方式

          ④查询时带上别名

          select 表达式 as 别名 from 表名;
          

          比如现在有一个学生成绩表,有语文、数学、英语三个科目,我想查询某个学生成绩的总和,可以这样:

          「MySQL」增删查改,在这里插入图片描述,第8张

          查询结果的列就只有 sum,而不是 chinese+math+english,这样可以使查询结果更简洁


          ⑤查询时进行去重

          select distinct 列名 from 表名
          

          根据查询出的列名进行去重,把列的值相同的记录合并为一个

          比如现在有如下的表:

          「MySQL」增删查改,在这里插入图片描述,第9张

          「MySQL」增删查改,在这里插入图片描述,第10张

          现在只查询一个列,那如果同时查询多个列并进行去重呢?

          「MySQL」增删查改,在这里插入图片描述,第11张

          从上图我们可以得出:查询多个列时,只有两个记录多个列的值都相同,才算是重复


          ⑥查询时进行排序

          select 列名 from 表名 order by 列名 
          

          「MySQL」增删查改,在这里插入图片描述,第12张

          (注意前面用desc + 表名来查看表结构;而这里是将desc放在后面排降序)

          order by 也可以指定多个列进行排序,指定多个列时,带有优先级,前面的列优先级高,后面的低。优先级高的列的值相同时,才会去比较优先级低的列

          举个例子:

          「MySQL」增删查改,在这里插入图片描述,第13张

          NULL在排序时会被当成是最小的


          ⑦条件查询

          就是查询时指定筛选条件,只有满足条件的数据才会保留作为结果集(如果不满足,那么这个数据会被跳过)

          • 比较运算符
            运算符说明
            >, >=, <, <=大于,大于等于,小于,小于等于
            =等于
            <=>等于
            !=, <>不等于
            BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
            IN(option…)如果是 option 中的任意一个,返回 TRUE(1)
            IS NULL是NULL
            IS NOT NULL不是NULL
            LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

            我们重点来讲两个“等于”

            对于 NULL = NULL ,它的结果是 false

            而如果是 NULL <=> NULL,结果则为 true

            • NULL表示某个单元格没填,对于 =,它认为等号左右的 NULL 指的不是同一个单元格,没有可比性,所以二者不相等
            • 而对于 <=>,它只看内容,既然二者都没有内容,那就都一样

              要使用条件查询需要搭配关键字where

              「MySQL」增删查改,在这里插入图片描述,第14张

              • 逻辑运算符
                运算符说明
                AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
                OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
                NOT条件为 TRUE(1),结果为 FALSE(0)

                注意:

                1. WHERE条件可以使用表达式,但不能使用别名
                2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

                🍌分页查询

                分页查询可以限制这一次查询最多查询几个记录

                比如现在一个学生表中有四个学生的记录,使用分页查询查两条记录:

                「MySQL」增删查改,在这里插入图片描述,第15张

                还可以使用 offset描述当前结果从第几条开始获取(不写 offset 的话默认从第 0 条开始)


                🍉修改

                update 表名 set 列名 = 值 where 条件
                

                注意:

                • 可以同时修改多个列的值
                • 在修改时,如果是修改整型,不能使用+=、-=运算符(MySQL不支持),要完整写出来
                • 等号表示赋值
                • where + 条件 是指定要修改哪些行,如果没有条件,那就是默认修改所有行
                • update操作的不是临时表,而是硬盘上的数据
                • 给定一个SQL语句,就是一个整体,要么就是整个执行成功,要是失败,就全都不执行

                  比如说对某列进行修改,结果其中某行修改失败,那么其他行也全都不修改


                  🍉删除

                  delete from 表名 where 条件/order by/limit;
                  

                  如果删除语句中没有指定条件,那就会把表中所有数据给删掉

                  (注意:删除所有数据和删表是有区别的)

                  delete 也是一个危险的操作