阅读 9216

数据库[MySQL、Mongo、Redis]的实用技巧专栏

MedusaSorcerer的博客


专栏目录

专栏详情

MySQL

MySQL介绍

数据库(DataBase, 简称DB)
理解为电子存储系统, 相当于一个电子文件的箱子, 放了很多的信息或者文件在这个柜子里
与DB相关的还有 DBMS(数据库管理系统), DBS(数据库系统), DBA(数据库管理员) 等专业术语
复制代码
MySQL是关系型数据库的典型, 映射的数据格式很类似于表格数据
而MySQL体现出卓越的性能高、成本低、可靠性好的特点应用于广大项目中
关系型数据库更加是建立在关系模型的基础上, 借助于集合代数等数学方法来处理的数据库
复制代码

MySQL连接

# 打开CMD窗口或者是你的Linux主机界面
# USER: 连接数据库的用户名, 在数据库服务设置里可免除用户选项
# IP: 指-h(host)选项的值, 远程连接需要的DB所在IP
# -p: 指代的是password 输入用户名对应的密码, 若没有用户名的话就可以忽略了
mysql -u USER -h IP -p

# 回车后就可以看到隐式密码输入, 用户名没有设置密码的话直接回车即可连接
# 当你连接成功后会进入MySQL交互界面
复制代码

MySQL查询

# 查看所有的数据库
show databases

# 连接指定数据库
use DatabasesName

# 查看数据库中所有的表
show tables

# 查询TableName表里面所有的数据
SELECT * FROM TableName;

# 查询TableName表里面所有的数据, 并指定返回的字段
SELECT field1, field2 FROM TableName;

# 查询TableName表里面field1等于1的数据
SELECT * FROM TableName WHERE field1=1;

# 查询TableName表里面field1等于1且field2=2的数据
SELECT * FROM TableName WHERE field1=1 AND field2=2;

# 查询TableName表里面field1等于1或者field2=2的数据
SELECT * FROM TableName WHERE field1=1 OR field2=2;
复制代码

MySQL更新

# 更新tablName表中所有数据的name字段, 值为"Medusa"
update tablName set name="Medusa";

# 更新tablName表中id=1的name字段, 值为"Medusa"
update tablName set name="Medusa" where id=1;
复制代码

MySQL新增

# 增加指定字段指定值
insert info tablName(id,name) values(6,'medusa');
复制代码

MySQL删除

# 删除指定数据
delete from tablName where id=1;

# 删除所有数据 (确定好自己的约束条件, 免得清库跑路了)
delete from tablName;
复制代码

Mongo

Mongo介绍

MongoDB是和MySQL不一样的非关系型数据库  
那么也就意味着这个数据库每一条数据(文档)相互独立, 想存储什么样的JSON数据都可以
Mongo的数据类型类似于JSON数据
{
    {
        "_id": "",
        'data': {
            'key': 'value'
        }
    },
    {
        "_id": '',
        'info': 1
    }
}
复制代码

Mongo查询

# 查询所有的数据文档
# query 是数据库过滤的Json字符集
# projection 映射指定字符返回集合
db.collection.find(query, projection)

# pretty()  以格式化的方式来显示所有文档
db.collection.find().pretty()

# 查询指定的数据文档
db.collection.find({'_id': xxx})
复制代码

Mongo删除

# 删除某一条文档
# query :(可选)删除的文档的条件
# justOne : (可选)如果设为true或1,则只删除匹配的第一个文档, 否则或使用默认值false,则删除所有匹配条件的文档
# writeConcern :(可选)抛出异常的级别等级
db.collection.remove(
   <query>,
   {
        justOne: <boolean>,
        writeConcern: <document>
   }
)

# 删除所有文档/清空数据库
db.collection.remove({})
复制代码

Mongo更新

# query: update的过滤条件
# update: update的对象和一些更新的操作符(如$,$inc...)等
# upsert: (可选),如果不存在update的记录, true为插入新增数据,默认是false
# multi: (可选),默认是false只更新检索的第一条文档,否则为true, 更新检索的多条记录
# writeConcern: (可选),抛出异常的级别等级
db.collection.update(
   <query>,
   <update>,
   {
        upsert: <boolean>,
        multi: <boolean>,
        writeConcern: <document>
   }
)
复制代码

Mongo新增

db.collection.insert({
    name: 'Medusa', 
    description: '新增了一条MongoDB数据'
})
复制代码

Mongo比较符

等于          {key:value}
小于          {key: {$lt :value}}
大于          {key: {$gt :value}}
小于等于        {key: {$lte :value}}
大于等于        {key: {$gte :value}}
不等于         {key: {$ne :value}}
复制代码

Mongo关系符

AND          {key1:value1, key2:value2}
OR           {$or: [{key1: value1}, {key2:value2}]}
复制代码

Mongo聚合

待更新
复制代码

Mongo聚合后返回原始数据

db.getCollection("DBName").aggregate(
    [
        {$sort : {time : -1}},
        {
            $group: {
                _id: {
                    "a": "$A",
                    "b": "$B",
                },
                # 使用doc展示检索的原始文档
                doc: {$first: "?ROOT"}
            }
        }
    ]
)

# 排序time字段倒叙
# 聚合结果的doc展示的则是最新的聚合原始数据
复制代码

Redis

Redis介绍

官网:https://redis.io/
Redis 是一个轻量级的存储数据库
一般情况会用Redis作为缓存DB的数据存储

# 优点
* 支持持久化在磁盘中
* 支持五种数据类型
* 支持数据备份
* 读写效率极高 (读约110000次/s, 写约81000次/s) 
* 原子性, 要么成功要么失败
* 事务
* 存储有效期
复制代码

Redis的存储方式

Redis是一个Key-Value的方式存储数据的
就类似与Python的字典一样
用Key获取Key对应的Value
复制代码

Redis的存储类型

描述说明介绍
String字符串Redis中最基础的数据类型,在Redis中是二进制安全存在的,这也说明了字符串可以接受任何格式的数据,如字符, Json数据, 图片文件, 数字等,是标准的K-V模式,一般来存字符和数据等, Value最大长度为512MB
Hash哈希值Redis中可以用一个name存储多个K-V的数据存储方式, 而一个name可以最大存储4294967295个K-V
List列表列表允许从序列的两端加入或取出数据元素,列表由多个字符串组成的有序可重复的序列,和Python的列表是类似的, 列表包含最大元素数量是4294967295
Set集合集合是无序不重复的,和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。集合最大的优势在于可以进行交集并集差集操作。集合包含最大元素数量是4294967295
Sorted Set有序集合有序集合是在集合的基础上加上了 score 的权重参数, 这个参数可以将集合排序