Mysql练习题

作业一:string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令
    1、 string类型数据的命令操作:
    (1) 设置键值:

set key values


    (2) 读取键值:

get key


    (3) 数值类型自增1:

INCR key


    (4) 数值类型自减1:

 DECR key


    (5) 查看值的长度:

STRLEN key

    2、 list类型数据的命令操作:
    (1)对列表city插入元素:Shanghai Suzhou Hangzhou

 LPUSH city Shanghai Suzhou Hangzhou


    (2)将列表city里的头部的元素移除

LPOP city


    (3)将name列表的尾部元素移除到number列表的头部

RPOPLPUSH
name
number


    (4) 对一个已存在的列表插入新元素

RPUSH key value1
[value2]


    (5)查看list的值长度

LLEN list


    3、 hash类型数据的命令操作:
     (1) 设置一个hash表,order表里包括的键值信息有:id:1,customer_name:张三

HSET order id 1 customer_name:'张三'


    (2) 创建一个hash表,表里的键值批量插入

HMSET key field1 value1 [field2 value2]


    (3) 获取order对应的map的所有key

HGETALL map


    (4) 获取order对应的map的键值数量

HLEN map


    (5) 获取order表里的id值

HMGET order id 


    4、Keys相关的命令操作
    (1) 查看key是否存在

EXISTS key


    (2) 查找满足pattern的keys

KEYS pattern


    (3) 查看key的超时时间

PTTL key


    (4) 遍历key

SCAN cursor [MATCH pattern] [COUNT count]

作业二:举例说明list和hash的应用场景,每个至少一个场景

List应用场景
栈:LPUSH +LPOP -->FILO
先进后出原则:LPUSH从队列左边进入d,c,b,a, LPOP从队列左边出来a,b,c,d
队列: LPUSH+RPOP
先进先出原则:LPUSH从队列左边进入d,c,b,a, RPOP从队列右边出d,c,b,a
阻塞队列: LPUSH+BRPOP
LPUSH+BRPOP是在LPUSH+RPOP的基础上多了阻塞和等待的功能,
BRPOP实际上就是等于Blocking+RPOP,当队列中的数据为空时,
会一直监听消息队列,直到获得消息

Hash应用场景
1. 对象缓存

hash类型的(key, field, value)的结构与对象的(对象id, 属性, 值)的结构相 似,也可以用来存储对象。
在介绍string类型的应用场景时有所介绍,string + json也是存储对象的一种方式,那么存储对象时,
到底用string +json还是用hash呢?两种存储方式的对比如下表所示。

当对象的某个属性需要频繁修改时,不适合用string+json,因为它不够灵活,
每次修改都需要重新将整个对象序列化并赋值,如果使用hash类型,则可以针对某个属性单独修改,没有序列化,
也不需要修改整个对象。比如,商品的价格、销量、关注数、评价数等可能经常发生变化的属性,
就适合存储在hash类型里。

mongodb作业

1. 创建一个数据库 名字grade 

use grade


2. 数据库中创建一个集合名字 class

db.createCollection('class')


3. 集合中插入若干数据 文档格式如下
{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}
hobby: draw  sing  dance  basketball football  pingpong  computer 

db.class.insert({name:'zhang',age;10,sex:'m',hobby:['a','b','c']})


4. 查找
查看班级所有人信息

db.class.find()


查看班级中年龄为8岁的学生信息

db.class.find({age:8})


查看年龄大于10岁的学生信息

db.class.find({age:{$gt:10}})


查看年龄在 4---8岁之间的学生信息 

db.class.find({age: {$gte:4,$lte:8}})


找到年龄为6岁且为男生的学生

db.class.find({age: {$eq:6},sex:'男'})


找到年龄小于7岁或者大于10岁的学生

db.class.find({$or:[{age:{$gt:7}},{age:{$lt:10}}]}


找到年龄是8岁或者11岁的学生

db.class.find({age:{$in[8,11]}}


找到兴趣爱好有两项的学生


找到兴趣爱好有draw的学生

db.student.find({hobdy:{$in:['draw']}})


找到既喜欢画画又喜欢跳舞的学生

db.student.find({hobdy:{$all:['dance','dance']}})


统计爱好有三项的学生人数
找出本班年龄第二大的学生

db.student.find().sort({age: -1}).skip(1).limit(1)


查看学生的兴趣范围
将学生按年龄排序找到年龄最大的三个
删除所有 年级大于12或者小于4岁的学生
5. 增加、更新、删除、统计
1. 将小红的年龄变为8岁 兴趣爱好变为 跳舞 画画
2. 追加小明兴趣爱好  唱歌
3. 小王兴趣爱好增加  吹牛 打篮球
4. 小李增加爱好,跑步和唱歌,但是不要和以前的重复
5. 该班所有同学年龄加1
6. 删除小明的sex属性
7. 删除小李兴趣中的第一项
8. 将小红兴趣中的画画爱好删除

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

North433

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

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

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

打赏作者

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

抵扣说明:

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

余额充值