Mysql基础知识回顾整理

假设有一个public_db库,一个info表

建库:
create database public_db;

建表:
DROP TABLE IF EXISTS info;
CREATE TABLE info (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
value INTEGER NOT NULL
);

插入语句:

insert into info value(996, 'NallY', 1002);
insert into info value(997, 'NallY', 1900);
insert into info value(998, 'NallY', 900);
insert into info value(999, 'NallY', 500);
insert into info value(990, 'Uinoh', 1080);
insert into info value(991, 'Uinoh', 980);
insert into info value(992, 'Uinoh', 520);
insert into info value(993, 'Pokyi', 730);
insert into info value(993, 'Pokyi', 1270);

显然最后一条会报错,因为主键重复了,删除主键:

alter table info drop primary key;

然后就可以进行插入了,但是一般一个表都会有主键,这是为了查询方便。我这里只是为后面的内容做铺垫,所以删除了主键。

现在表里的数据就是:

mysql> select * from info;
+-----+-------+-------+
| id  | name  | value |
+-----+-------+-------+
| 990 | Uinoh |  1080 |
| 991 | Uinoh |   980 |
| 992 | Uinoh |   520 |
| 993 | Pokyi |   730 |
| 996 | NallY |  1002 |
| 997 | NallY |  1900 |
| 998 | NallY |   900 |
| 999 | NallY |   500 |
| 993 | Pokyi |  1270 |
+-----+-------+-------+
9 rows in set (0.00 sec)

如果要查询到 id, name, 以及不同name下value的和,且需要value大于1000,根据这个条件,写出如下查询语句:

mysql> select id, name, sum(value) as sum_value from info group by id, name having sum_value > 1000;
+-----+-------+-----------+
| id  | name  | sum_value |
+-----+-------+-----------+
| 990 | Uinoh |      1080 |
| 993 | Pokyi |      2000 |
| 996 | NallY |      1002 |
| 997 | NallY |      1900 |
+-----+-------+-----------+
4 rows in set (0.01 sec)

看起来很奇怪,因为正常情况下id和name应该是一一对应的关系,这里主要是having子句的使用,常与group by一起使用,目的是将分组后的组合进行筛选,这与where子句先进行条件筛选不同

什么意思?其他的数据可能会产生误导,所以仅仅看id=993这条记录就可以理解了,它有两个值:730和1270,如果使用where,那么必然最后的结果集sum的时候不会看到730这条记录,因为sum之前已经被where过滤掉了。但是having却是恰恰相反,可以达到我们的目的。

备份与恢复

将整个库备份到.sql文件:

mysqldump -uroot -p123456 public_db > /tmp/test_db.sql

恢复前,如果源数据被删除,需要重新建立数据库,再执行下面的恢复语句:

mysql -uroot -p123456 test_db < /tmp/test_db.sql
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一生要强的Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值