【MySQL】如何速通MySQL(2)

前言:本篇博客介绍如何速通MySQL的第二篇,主要介绍Mysql中主要的基础的入门,学习MySQL之前要先安装好MySQL,如果还没有安装的小伙伴可以看看博主前面的博客,里面有详细的安装教程。或者看一下下面这个链接,以及第一篇还没看的也建议先看第一篇噢~

如何安装Mysql
【MySQL】如何速通MySQL(1)

在第一篇如何速通MySQL中我们学习了Mysql的基础概念以及关于库的操作和表的操作,但是对于表的操作我们只学习了创建和删除,而对于MySQL表的数据操作还没有学习,所以本篇博客就对MySQL中的增删改查进行详细的学习~话不多说,走起!

MySQL如何速通MySQL

  • 一、MySQL增删改查(基础)
    • 1.增加数据
    • 2.查看数据
      • 1️⃣全列查询
      • 2️⃣指定列查询
      • 3️⃣表达式查询
      • 4️⃣去重查询
      • 5️⃣排序查询
      • 6️⃣条件查询
      • 7️⃣分页查询
    • 3.修改数据
    • 4.删除数据

一、MySQL增删改查(基础)

对于MySQL的增删改查,实际上对应的我们称作CRUD,其实也是我们日常生活工作中最经常干的东西。那么CRUD是什么呢?

⭐CRUD是指在关系型数据库中,对数据进行创建(Create)、读取查询(Retrieve)、更新(Update)、删除(Delete)的操作。

具体含义如下:

创建(Create):向数据库中增加新的数据记录。
读取查询(Retrieve):从数据库中查询和获取数据记录。
更新(Update):修改数据库中已经存在的数据记录。
删除(Delete):从数据库中删除数据记录。

对应到表中数据也是差不多的,只是语法略有不同。

1.增加数据

而对于这几个操作中,最复杂的就是查,所以我们先从增开始学习,毕竟不增的话没有数据查个什么玩意。相应语法也很简单:

//1.插入一条数据
insert into [表名] values (值,,...;

//2.插入多条数据
insert into [表名] values (值,,...,(值,,......;

比如:

mysql> use happy;//在重新登录数据库时,记得先选中要操作的数据库
Database changed//提示数据库切换成功
mysql> insert into student values (1,'lisa');//向student表插入数据
Query OK, 1 row affected (0.01 sec)//插入成功,1行受影响
mysql> insert into student values (2,'faker'),(3,'joker'),(4,'thesky');//插入三个人的数据
Query OK, 3 rows affected (0.00 sec)//插入成功,3行受影响

这里在插入数据的时候需要注意以下几点:

✅插入数据时,数据要和表结构相对应,也就是类型要匹配。
✅插入数据时,可以为空,写上null,数据库会自动填充默认值
✅插入数据时,要注意括号内值之间是用英文逗号分隔
✅插入多条数据时,可以一条一条插,但是效率会低很多


2.查看数据

学会了插入数据当然要看看有没有插入成功,所以我们可以通过查数据来看看数据表中是否插入成功,所以我们可以输入命令:

1️⃣全列查询

select * from [表名]//全列查找

比如:

mysql> select * from student;//查看student表的数据
+------+--------+
| id   | name   |
+------+--------+
|    1 | lisa   |
|    2 | faker  |
|    3 | joker  |
|    4 | thesky |
|    5 | NULL   |
|    6 | NULL   |
| NULL | la     |
+------+--------+//显示为一个表的形式
7 rows in set (0.00 sec)//查到7行

而上面的语法中,我们在后面注释着是全列查询,也就是说,我们现在查看的是整个表的数据,其中的select * from student其实可以这样理解:

【MySQL】如何速通MySQL(2)_第1张图片

2️⃣指定列查询

所以我们也可以使用指定列查询,语法为:

select [列名] from [表名]//指定列查询

比如:

mysql> select id from student;//喂,我是阿sir,只查id
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
| NULL |
+------+
7 rows in set (0.00 sec)

3️⃣表达式查询

有时候我们需要在查的数据中去稍微操一下~比如说期末考试咱挂了老师可能帮我们捞捞,就给咱数学成绩上加上10分,这时候就可以直接是这样子,我们先创建好演示表:

//以下代码为创建演示表代码
mysql> create table score (id int, name varchar(20), math decimal(3,1), chinese decimal(3,1), english decimal(3,1));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into score values(1,'jame',88.5,91,66);
Query OK, 1 row affected (0.00 sec)

mysql> insert into score values(2,'curry',99,85.5,67);
Query OK, 1 row affected (0.00 sec)

mysql> insert into score values(3,'tatuo',55,75.5,87);
Query OK, 1 row affected (0.00 sec)

mysql> select * from score;
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
+------+-------+------+---------+---------+
2 rows in set (0.00 sec)

创建完成之后,如果我们想在查询数学成绩,并且希望老师大发慈悲给我们多加点分,让不合格的同学看到希望:

select [表达式] from [表名]//表达式查询

mysql> select math+10 from score;//查询表中数学成绩并显示加10分的
+---------+
| math+10 |
+---------+
|    98.5 |
|   109.0 |
|    65.0 |
+---------+//对比上面数据都加上了10分了
3 rows in set (0.00 sec)

这里会有同学有问题说,我们创建的math也就是数学成绩的类型是decimal(3,1),这里显示的109.0很明显就不符合了,很明显就存不进去吧,咋还能显示?

▶查询的数据相当于一个临时表,所以并不影响原始表内的成绩数据。

也就是说,MySQL是一个"客户端—服务器"结构的程序,所以在用户在客户端输入sql,是通过请求发送给服务器,服务器解析并执行sql把查询的结果从硬盘读取出来,通过网络响应还给客户端,客户端把这些数据按临时表的形式展示出来。

除了给数学+10,还可以查数语英总成绩:

mysql> select name,math+chinese+english from score;
//查看各位同学,以及语数英总成绩
+-------+----------------------+
| name  | math+chinese+english |
+-------+----------------------+
| jame  |                245.5 |
| curry |                251.5 |
| tatuo |                217.5 |
+-------+----------------------+
3 rows in set (0.00 sec)

然后这里大家觉不觉得,这查的也太难看了,math+10,虽然说被老师捞了很幸运,但是这也露的太明显了,或者觉得上面语数英太长了,这显示结果的名字能不能改一下啊,你还别说,可以改!我们用到as就可以啦:

select [表达式] as [别名] from [表名];
mysql> select math+10 as new_math from score;//把成绩+10别名为new_math
+----------+
| new_math |
+----------+
|     98.5 |
|    109.0 |
|     65.0 |
+----------+
3 rows in set (0.00 sec)

mysql> select name,math+chinese+english as total from score;//语数英相加别名为total
+-------+-------+
| name  | total |
+-------+-------+
| jame  | 245.5 |
| curry | 251.5 |
| tatuo | 217.5 |
+-------+-------+
3 rows in set (0.00 sec)

同样的,这个别名跟绰号一样,不一定要表达式,你也可以把math as为new_math,这里相当于用别名显示。

4️⃣去重查询

对于一些相同的数据来说,有时候我们只需要一个结果,比如说我想看看这个班上数学都有哪些分数,如果有好几个同分,那查出来的表就比较冗余了,所以我们有一个去重查询:

select distinct [列名] from [表名]// distinct去重查询

比如:

mysql> insert into score values(4,'lisa',55,65.5,81);//先在刚刚的表加个同分的数学
Query OK, 1 row affected (0.00 sec)
mysql> select * from score;//表内现状
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
|    4 | lisa  | 55.0 |    65.5 |    81.0 |
+------+-------+------+---------+---------+
4 rows in set (0.00 sec)
mysql> select distinct math from score;//查询数学成绩并去重
+------+
| math |
+------+
| 88.5 |
| 99.0 |
| 55.0 |
+------+
3 rows in set (0.00 sec)

5️⃣排序查询

正如上面看到的,我们的数学成绩列出来了,但是看着不太行啊,感觉没有excel表那种赏心悦目,原来是没有按数字排序,看着怪别扭,所以我们可以用以下语法对查询结果进行排序:

select [列名] from [表名] order by [列名]//查询结果排序 order by(默认升序)
select [列名] from [表名] order by [列名] desc//查询结果排序降序

并且我们可以查询多个列,什么语文啊英语啊一起查,然后还是按数学成绩排序,也是可以的,这样就可以优先看到我们想看到的数据啦~

比如:

mysql> select math from score order by math;//就查数学然后按数学排序,默认升序排列
+------+
| math |
+------+
| 55.0 |
| 55.0 |
| 88.5 |
| 99.0 |
+------+
4 rows in set (0.00 sec)
mysql> select * from score order by math desc;//加上desc就为降序排序
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    2 | curry | 99.0 |    85.5 |    67.0 |
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
|    4 | lisa  | 55.0 |    65.5 |    81.0 |
+------+-------+------+---------+---------+
4 rows in set (0.00 sec)

还有一些查询大家可以自己动手试试~

mysql> select math,chinese from [表名] order by math;//查询结果排序 order by(默认升序)
mysql> select math,chinese from [表名] order by math desc//查询结果排序 desc 降序
mysql> select math,chinese from [表名] order by math desc,chinese desc//按完数学按语文排,数学成绩一样就语文好的排前面

6️⃣条件查询

对于上面的查询中,在一定程度上可以解决我们的查询问题,但是只能去去重排排序,干不了一些复杂的查询,比如我想看一下数学不及格的有哪几位,语文90分以上的有哪些,在60到90的又有哪些,所以我们就用到了条件查询:

select [] from [表名] where [条件]

在认识怎么使用之前,先来了解一些运算符,因为我们的where子句要结合他们一起使用。

比较运算符:

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
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 个)任意字符;_ 表示任意一个字符

逻辑运算符:

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

大致上我们就是使用上面的这些运算符结合where子句去进行条件查询,光看文字还是不得劲,我们直接把例子抬上来:

mysql> insert into score values(5,'jisoo',null,null,null);//新增缺考同学一位
Query OK, 1 row affected (0.00 sec)

mysql> select * from score;//目前我们表中所含数据
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
|    4 | lisa  | 55.0 |    65.5 |    81.0 |
|    5 | jisoo | NULL |    NULL |    NULL |
+------+-------+------+---------+---------+
5 rows in set (0.00 sec)

1.大于小于大于不等于

⭐这里的就纯粹是比较大小,相当于把数据表中的数据进行遍历,然后取出每一行的数据并把数据代入条件中,如果是真,则数据保留下来,如果是假,就pass掉。

mysql> select * from score where math < 60;//查询数学成绩不及格的童鞋~
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
|    4 | lisa  | 55.0 |    65.5 |    81.0 |
+------+-------+------+---------+---------+
2 rows in set (0.00 sec)

mysql> select * from score where chinese > 90;//查询语文大于90的学霸~
+------+------+------+---------+---------+
| id   | name | math | chinese | english |
+------+------+------+---------+---------+
|    1 | jame | 88.5 |    91.0 |    66.0 |
+------+------+------+---------+---------+
1 row in set (0.00 sec)

mysql> select * from score where math = null;//想查询缺考的人,但是因为用等于比较 NULL 不安全
Empty set (0.00 sec)

mysql> select * from score where math <=> null;//所以得用这个,<=>来比较null,就可以查到缺考的人
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    5 | jisoo | NULL |    NULL |    NULL |
+------+-------+------+---------+---------+
1 row in set (0.00 sec)

mysql> select * from score where math != 55;//查询不是55分的人
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
+------+-------+------+---------+---------+
2 rows in set (0.00 sec)

2.在区间或在集合内

这里的就是看是否在这里区间或者集合里,对于between and来说,是在一个区间内,如果between 60 and 90就是在60到90之间的,包括60和90;而in则是查询是否在in的集合里面存在这个数据。

mysql> select * from score where math between 60 and 90;//查询在60到90之间的童鞋有哪些~
+------+------+------+---------+---------+
| id   | name | math | chinese | english |
+------+------+------+---------+---------+
|    1 | jame | 88.5 |    91.0 |    66.0 |
+------+------+------+---------+---------+
1 row in set (0.00 sec)

mysql> select * from score where math in(88.5,99);//查询数学成绩是88.5或者99的童鞋~
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
+------+-------+------+---------+---------+
2 rows in set (0.00 sec)

3.空值和非空查询

对于空值和非空也有另一种比较方式,就是用is null的表达式,或者如果要查询有成绩的同学的值,我们可以用is not null,表示非空查询。

mysql> select * from score where math is null;//查询数学成绩是空的值
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    5 | jisoo | NULL |    NULL |    NULL |
+------+-------+------+---------+---------+
1 row in set (0.00 sec)

mysql> select * from score where math is not null;//查询数学成绩非空的成绩表
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
|    4 | lisa  | 55.0 |    65.5 |    81.0 |
+------+-------+------+---------+---------+
4 rows in set (0.00 sec)

4.模糊查询

模糊查询意思就是说咱们平时有时候记得但不完全记得这位同学名字,又或者说需要查询班上同一个姓的时候,我们可以用到模糊查询,比如说孙悟空,孙策,孙红雷都姓孙就可以用"孙%"。

select [列名] from [表名] where [列名] like "[值%]"
select [列名] from [表名] where [列名] like "[值_]"

⭐这里的模糊查分为两个标识符,一个是"%“一个是”_",其中,% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符。不要求元素完全相同,只要满足一定规则就可以啦~

比如说:

mysql> insert into score values(6,'lysa',66,77,88),(7,'lin',85,99,99);//添加两行数据
Query OK, 2 rows affected (0.00 sec)
mysql> select * from score where name like "l%";//查询姓名开头为l的同学
+------+------+------+---------+---------+
| id   | name | math | chinese | english |
+------+------+------+---------+---------+
|    4 | lisa | 55.0 |    65.5 |    81.0 |
|    6 | lysa | 66.0 |    77.0 |    88.0 |
|    7 | lin  | 85.0 |    99.0 |    99.0 |
+------+------+------+---------+---------+
3 rows in set (0.00 sec)

当然有时候我们不止只搜开头字母,比如说我好像记得咱班有人是l开头而且姓名是三个字母的时候,就可以用到下划线_来搜搜,一个下划线代表一个字符,所以就可以搜"l__":

mysql> select * from score where name like "l__";//这里可是有俩条下划线的~
+------+------+------+---------+---------+
| id   | name | math | chinese | english |
+------+------+------+---------+---------+
|    7 | lin  | 85.0 |    99.0 |    99.0 |
+------+------+------+---------+---------+
1 row in set (0.00 sec)

再举一些例子,但是自己去实践噢:

//mysql相亲事务所开业啦,走过路过不要错过~
mysql> select * from score where name like "j_m_";//俺要找一个姓j名字而且是四个字母第三个还得是m的~

mysql> select * from score where name like "%y";//姓啥不重要,尾号才是命,哥要找尾号是y的

mysql> select * from score where name like "l%n";//前面两个简直敷衍,我都要,首要姓l,尾要是n,中间是啥无所谓

mysql> select * from score where name like "%r%";//姓啥不重要,名字中带r就行啦!

mysql> select * from score where name like "t_t%";//我我我!找个姓t第三个字母又是t的人,其他也不重要~

mysql> select * from score where name like "_%";//类似于这种没啥目标性的,相当于没有模糊查询,全列出来

5.逻辑运算符

看完上面虽然能查但只能查一点点的运算符之后,大家有没有想法想着更复杂有点,比如上面的相亲事务所,虽然我喜欢姓l的,但是我肯定得找优秀一点的呀,所以多一点条件的话,连接词就是咱们的逻辑运算符:

mysql> select * from score where name like "l%" and math>80;
mysql> select * from score where name like "l%" or math>80;
mysql> select * from score where name not like "l%" ;
//and就是我全都要,不仅得姓l还得数学好,起码也得80分以上吧~
mysql> select * from score where name like "l%" and math>80;
+------+------+------+---------+---------+
| id   | name | math | chinese | english |
+------+------+------+---------+---------+
|    7 | lin  | 85.0 |    99.0 |    99.0 |
+------+------+------+---------+---------+
1 row in set (0.00 sec)
//楼上的姐妹是真贪心,姓l或者数学80分以上满足一个都行,两个都有就更好~
mysql> select * from score where name like "l%" or math>80;
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 | -- 数学大于80
|    2 | curry | 99.0 |    85.5 |    67.0 | -- 数学大于80
|    4 | lisa  | 55.0 |    65.5 |    81.0 | -- 姓l
|    6 | lysa  | 66.0 |    77.0 |    88.0 | -- 姓l
|    7 | lin   | 85.0 |    99.0 |    99.0 | -- 姓l数学还大于80
+------+-------+------+---------+---------+
5 rows in set (0.00 sec)
//我不一样,我被姓l的渣过,除了l姓同学其他我都可以
mysql> select * from score where name not like "l%" ;
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
|    5 | jisoo | NULL |    NULL |    NULL |
+------+-------+------+---------+---------+
4 rows in set (0.00 sec)

同样的,逻辑运算符是可以使用多个来表达想表达的意思的,比如说在不姓l的人里面要数学大于90分的或者语文大于90分的:

mysql> select * from score where name not like "l%" and (math>90 or chinese>90);
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
+------+-------+------+---------+---------+
2 rows in set (0.00 sec)

需要注意的是,在进行逻辑运算符的时候,我们要注意先后顺序,如果有多个运算符时,建议用小括号圈起来区分。

7️⃣分页查询

对于查询来说,有时候我们想要的数据只需要前面的,也就是说只需要一部分,那就不需要把数据全列出来。比如说我们在百度搜索的时候,我们搜索后的结果并不是都在同一页,而是分开了很多页,每一页有n条数据,所以这相当于我们的分页查询。

mysql> select [列名] from [表名] limit [多少条数据] offset [从哪条开始];

具体来说我们分析一下下面两个例子:
【MySQL】如何速通MySQL(2)_第2张图片

mysql> select * from score limit 3 offset 2;//从2往后拿3行数据,即3,4,5行的数据
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
|    4 | lisa  | 55.0 |    65.5 |    81.0 |
|    5 | jisoo | NULL |    NULL |    NULL |
+------+-------+------+---------+---------+
3 rows in set (0.00 sec)

【MySQL】如何速通MySQL(2)_第3张图片

mysql> select * from score limit 3;//从第一行开始拿三行数据
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 |
|    3 | tatuo | 55.0 |    75.5 |    87.0 |
+------+-------+------+---------+---------+
3 rows in set (0.00 sec)

以上就是对于查询的基础认识,除了上面的知识外,我们需要注意:

MySQL 中的 ORDER BY 和 LIMIT 子句是在查询语句的结果集上进行排序和限制显示数量的。也就是说,查询语句先执行,将符合条件的数据查询出来,然后对这些数据进行排序(如果有 ORDER BY 子句)和限制数量(如果有 LIMIT 子句),最终返回排序后的结果集。

具体地讲,MySQL 在处理含有 ORDER BY 子句的语句时,会先创建一个临时表,将查询语句的结果放到这个临时表中,并按照指定的排序方式进行排序;在处理含有 LIMIT 子句的语句时,MySQL 会基于已排序的临时表,根据 LIMIT 中的参数,截取所需的行数作为结果集返回给用户。


3.修改数据

查完表不满意?那就改他!修改的语法在下面:

update [表名] set [列名] [=值(修改的值)] where / order by / limit

话不多说,直接上例子:

mysql> update score set math = 60 where math = 55;//把数学成绩55的改为60,让你及格~
Query OK, 2 rows affected (0.00 sec)//修改完成,两行受影响
Rows matched: 2  Changed: 2  Warnings: 0//matched是满足条件的行数,Changed是修改行数
mysql> update score set chinese=chinese+10 order by chinese limit 2;//给语文倒数前两名语文成绩加10分
Query OK, 1 row affected (0.00 sec)//修改完成,一行受影响
Rows matched: 2  Changed: 1  Warnings: 0//两行满足,一行修改,这里因为第一行的是null,null和其他数字进行操作结果仍然是null

我们来看一下前后的变化情况:

mysql> select * from score;//修改更新前
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    85.5 |    67.0 | -- 语文倒数第二行数据
|    3 | tatuo | 60.0 |    85.5 |    87.0 |
|    4 | lisa  | 60.0 |    85.5 |    81.0 |
|    5 | jisoo | NULL |    NULL |    NULL | -- 语文倒数第一行数据
|    6 | lysa  | 66.0 |    87.0 |    88.0 |
|    7 | lin   | 85.0 |    99.0 |    99.0 |
+------+-------+------+---------+---------+
7 rows in set (0.00 sec)

mysql> update score set chinese=chinese+10 order by chinese limit 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 2  Changed: 1  Warnings: 0

mysql> select * from score;
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    95.5 |    67.0 | -- 85.5变成95.5
|    3 | tatuo | 60.0 |    85.5 |    87.0 |
|    4 | lisa  | 60.0 |    85.5 |    81.0 |
|    5 | jisoo | NULL |    NULL |    NULL | -- 数据不变,操作后还是null
|    6 | lysa  | 66.0 |    87.0 |    88.0 |
|    7 | lin   | 85.0 |    99.0 |    99.0 |
+------+-------+------+---------+---------+
7 rows in set (0.00 sec)

除了直接把分值改了,也可以给某些同学开小灶,比如让他所有成绩都加10分,就是set后面都是成绩加10,然后where子句姓名等于这个同学的名字就好啦。

4.删除数据

增删改查的最后一个啦就是删啦,切记不要乱删啊慎重啊兄弟姐妹们,喜欢删自己建个表慢慢删去,别把重要数据删了噢,删除的语法是:

delete from [表名] where 条件/ order by / limit

比如:

mysql> select * from score;//原始数据表数据
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    95.5 |    67.0 |
|    3 | tatuo | 60.0 |    85.5 |    87.0 |
|    4 | lisa  | 60.0 |    85.5 |    81.0 |
|    5 | jisoo | NULL |    NULL |    NULL |
|    6 | lysa  | 66.0 |    87.0 |    88.0 |
|    7 | lin   | 85.0 |    99.0 |    99.0 |
+------+-------+------+---------+---------+
7 rows in set (0.00 sec)
mysql> delete from score where id=7;//把id=7的lin同学删了
Query OK, 1 row affected (0.00 sec)

mysql> delete from score where name like "l%";//剩下的l起头同学也删了
Query OK, 2 rows affected (0.00 sec)

mysql> select * from score;//相当于删了id为4,6,7的同学
+------+-------+------+---------+---------+
| id   | name  | math | chinese | english |
+------+-------+------+---------+---------+
|    1 | jame  | 88.5 |    91.0 |    66.0 |
|    2 | curry | 99.0 |    95.5 |    67.0 |
|    3 | tatuo | 60.0 |    85.5 |    87.0 |
|    5 | jisoo | NULL |    NULL |    NULL |
+------+-------+------+---------+---------+
4 rows in set (0.00 sec)

还有一个可以清除表数据的就是,用于删除表中的所有数据。TRUNCATE 比 DELETE 命令更快,因为它不会记录删除的行,也不会触发删除前或删除后的触发器:

truncate table [表名];

但是truncate命令不能用于删除部分行或指定条件,如果您需要删除选定的行,则应该使用 table命令。


这就是本篇如何速通MySQL第二部分的全部内容啦,接下来还有两个部分,带你速通MySQL。欢迎关注。一起学习,共同努力!

还有一件事:

你可能感兴趣的:(MySQL,mysql,数据库)