《MySQL基础教程》笔记6

Web  2023年12月1日 am8:08发布1年前 (2023)更新 城堡大人
132 0 0

前言

主要是记录一下updatedelete命令的使用。根据《MySQL基础教程-西泽梦路》学习,简单的做一下笔记。

记录于此,方便自己回忆。

正文

我这以Window版的phpstudy软件验证。

需要进入这个目录,才可以使用mysql命令

D:\phpstudy_pro\Extensions\MySQL5.7.26\bin

进入正文

创建info表,列表结构和数据如下

mysql> desc info;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   | PRI | NULL    |       |
| name  | varchar(100) | YES  |     | NULL    |       |
| page  | int(11)      | YES  |     | 100     |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> select * from info;
+----+------------+------+
| id | name       | page |
+----+------------+------+
|  1 | 笔友城堡     |  100 |
|  2 | 笔友城堡3    |  100 |
|  3 | dushu      |    4 |
|  4 | shu        |   66 |
|  5 | shuuu      |  300 |
|  6 | NULL       |  120 |
|  7 | NULL       |  170 |
|  8 | NULL       |  173 |
+----+------------+------+
8 rows in set (0.00 sec)
case when使用

不输入分好就可以不断的输入

mysql> select
    ->    case
    ->       when page>= 150 then 'nice'
    ->       when page>= 50  then 'good'
    ->       else 'bad'
    ->    end
    -> from info;
+--------+
| good   |
| good   |
| bad    |
| good   |
| nice   |
| good   |
| nice   |
| nice   |
+--------+
8 rows in set (0.00 sec)

下面添加"评价"

mysql> select
    ->    case
    ->       when page>= 150 then 'nice'
    ->       when page>= 50  then 'good'
    ->       else 'bad'
    ->    end as '评价'
    -> from info;
+--------+
| 评价   |
+--------+
| good   |
| good   |
| bad    |
| good   |
| nice   |
| good   |
| nice   |
| nice   |
+--------+
8 rows in set (0.01 sec)
排序

通过SELECT命令显示的记录顺序是不规则的,如果需要按照一定顺序的显示,则需要添加一定条件。

升序
select * from 表名 order by 排序的列名;

下面按照page大小排序

# 或者 select * from info order by page asc;
mysql> select * from info order by page;
+----+------------+------+
| id | name       | page |
+----+------------+------+
|  3 | dushu      |    4 |
|  4 | shu        |   66 |
|  1 | 笔友城堡     |  100 |
|  2 | 笔友城堡3    |  100 |
|  6 | NULL       |  120 |
|  7 | NULL       |  170 |
|  8 | NULL       |  173 |
|  5 | shuuu      |  300 |
+----+------------+------+
8 rows in set (0.00 sec)

默认是升序,按照值大小。但如果想明确指定按升序排列,就需要像下面这样给命令加上ASC,效果跟上面一样。

降序

如果你想降序排序,那么使用desc。

如下,降序排列。

mysql> select * from info order by page desc;
+----+------------+------+
| id | name       | page |
+----+------------+------+
|  5 | shuuu      |  300 |
|  8 | NULL       |  173 |
|  7 | NULL       |  170 |
|  6 | NULL       |  120 |
|  1 | 笔友城堡     |  100 |
|  2 | 笔友城堡3    |  100 |
|  4 | shu        |   66 |
|  3 | dushu      |    4 |
+----+------------+------+
8 rows in set (0.00 sec)

当然如果要限制个数,可以在后面添加limit

# 降序
select * from info order by page desc limit 2;
# 增序1
select * from info order by page asc limit 2;
# 增序2
select * from info order by page limit 2;
指定查询范围

limit可以现在显示的个数,而offset可以指定偏移的位置。

offset必须跟limit配合使用

# 查询所有的数据
mysql> select * from info order by page asc;
+----+------------+------+
| id | name       | page |
+----+------------+------+
|  3 | dushu      |    4 |
|  4 | shu        |   66 |
|  1 | 笔友城堡     |  100 |
|  2 | 笔友城堡3    |  100 |
|  6 | NULL       |  120 |
|  7 | NULL       |  170 |
|  8 | NULL       |  173 |
|  5 | shuuu      |  300 |
+----+------------+------+
8 rows in set (0.00 sec)

# 只显示2条记录
mysql> select * from info order by page asc limit 2;
+----+-------+------+
| id | name  | page |
+----+-------+------+
|  3 | dushu |    4 |
|  4 | shu   |   66 |
+----+-------+------+
2 rows in set (0.00 sec)

# 偏移3个位置,只显示2条记录
mysql> select * from info order by page asc limit 2 offset 3;
+----+------------+------+
| id | name       | page |
+----+------------+------+
|  2 | 笔友城堡3    |  100 |
|  6 | NULL       |  120 |
+----+------------+------+
2 rows in set (0.00 sec)

使用offset之后,查询的2条数据只偏移3个位置之后的。

分组显示

mysql> select * from salary;
+-------+-------+-------+
| empid | sales | month |
+-------+-------+-------+
| A103  |   101 |     4 |
| A102  |    54 |     5 |
| A104  |   181 |     4 |
| A101  |   184 |     4 |
| A103  |    17 |     5 |
| A101  |   300 |     5 |
| A102  |   205 |     6 |
| A104  |    93 |     5 |
| A103  |    12 |     6 |
| A107  |    87 |     6 |
+-------+-------+-------+
10 rows in set (0.00 sec)

mysql>
mysql> select * from salary group by empid;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'company.salary.sales' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
mysql>

由于我这提示不支持,是MySQL版本不支持,需要修改配置。具体可看《Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre》或《MySQL报错“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法

暂时不看 group by相关内容,略过。

我还会回来的!

update

不指定条件
 update 表名 set 列名 = 新数据;

这种方式无异于删库提桶跑路,因为所有的列名的数据都会更新。

不推荐!

指定条件
 update 表名 set 列名 = 新数据 where 查询条件;

示范一下

# 更新数据
mysql> update info set name = "biu" where page=173;
# 查询更新后的所有数据
mysql> select * from info;
+----+------------+------+
| id | name       | page |
+----+------------+------+
|  1 | 笔友城堡     |  100 |
|  2 | 笔友城堡3    |  100 |
|  3 | dushu      |    4 |
|  4 | shu        |   66 |
|  5 | shuuu      |  300 |
|  6 | NULL       |  120 |
|  7 | NULL       |  170 |
|  8 | biu        |  173 |
+----+------------+------+

当然,按照书中的例子,先添加一列

# 添加新的mark列
alter table info add mark varchar(100);
# 查询所有数据
mysql> select * from info;
+----+------------+------+------+
| id | name       | page | mark |
+----+------------+------+------+
|  1 | 笔友城堡     |  100 | NULL |
|  2 | 笔友城堡3    |  100 | NULL |
|  3 | dushu      |    4 | NULL |
|  4 | shu        |   66 | NULL |
|  5 | shuuu      |  300 | NULL |
|  6 | NULL       |  120 | NULL |
|  7 | NULL       |  170 | NULL |
|  8 | biu        |  173 | NULL |
+----+------------+------+------+
# 指定条件更新mark值
mysql> update info set mark = "nice" where page> 150;
# 查询所有数据
mysql> select * from info;
+----+------------+------+------+
| id | name       | page | mark |
+----+------------+------+------+
|  1 | 笔友城堡     |  100 | NULL |
|  2 | 笔友城堡3    |  100 | NULL |
|  3 | dushu      |    4 | NULL |
|  4 | shu        |   66 | NULL |
|  5 | shuuu      |  300 | nice |
|  6 | NULL       |  120 | NULL |
|  7 | NULL       |  170 | nice |
|  8 | biu        |  173 | nice |
+----+------------+------+------+

当然,新增了一列,如果不需要了,可以删除,然后就能恢复到默认值。

alter table info drop mark;

delete

delete命令虽然会删除记录,但它并不会删除表的列结构。删除表本身时需要使用drop table命令。

delete from 表名; 删除数据内容

drop table 表名 or drop table if exists 表名 ; 删除列结构和数据

删除所有数据
delete from 表名;
删除指定条件的数据
delete from 表名 where 限定条件;

比如

# 删除page> 200的数据
delete from info4 where page> 200;

参考文章

  1. 《MySQL基础教程-西泽梦路》

 历史上的今天

  1. 2019: 李月亮:那些你所不知道的大事(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Only the original thread that created

在service中回调时通知界面刷新了数据,就提示了如下异常:Only the original thread that created a view hierarchy can touch its views.翻译了一下:只有创建了视图层次结构的原始线程才能访问它的视图意思就是只有在主U...

史铁生:合欢树

10岁那年,我在一次作文比赛中得了第一。母亲那时候还年轻,急着跟我说她自己,说她小时候的作文作得比我还要好,老师甚至不相信那么好的文章会是她写的。“老师找到家来问,是不是家里的大人帮了忙。我那时可能还不到10岁呢。”我听得扫兴,故意笑:“可能?什么叫‘可能还不到’?”她就解释,我装作根本不在意她的话...

朱自清:正义

正义是在我们心理!从明哲的教训和见闻的意义中,我们不是得着大批的正义么?但白白的搁在心里,谁也不去取用,却至少是可惜的事。两石白米搁在屋里,总要吃它干净,两箱衣服堆在屋里,总要轮流穿换,一大堆正义却扔在一旁,满不理会,我们真大方,真舍得!看来正义这东西也真*,竟抵不上白米的一个尖儿,衣服的一个扣儿。...

adb多个设备控制

前言对于一台电脑存在多个设备的,之前记录了,但不知道放哪了。因此,重新简单记录一下吧。主要是记忆力不行,放这里方便自己查找。正文# 查看设备adb devicesList of devices attachedUIS787021003B011234     deviceemulat...

自定义垂直Seekbar之添加事件监听

前言本文是《自定义垂直Seekbar简介》基础上进行修改的,参考Android原生的SeekBar的setOnSeekBarChangeListener新增的。后面新增的,重新开一片文章记录一下。正文本文跟《自定义垂直Seekbar简介》内容差不多,就是新增了setOnSeekBarCha...

戴望舒:致萤火

萤火,萤火,你来照我。 照我,照这沾露的草,照这泥土,照到你老。 我躺在这里,让一颗芽穿过我的躯体,我的心,长成树,开花; 让一片青色的藓苔,那么轻,那么轻把我全身遮盖, 象一双小手纤纤,当往日我在昼眠,把一条薄被在我身上轻披...