《MySQL基础教程》笔记6

Web2023年12月1日 am8:08发布8个月前更新 3XCN.COM站长
0 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。