数据库(Database)

基本概念

  1. 数据库就是按照一定的数据结构来组织、存储和管理数据的仓库
  2. 我们写的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会全部丢失;所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性
  3. 数据库则是大批量数据持久化的普遍选择
    ① 数据库
    ② 文件
  4. 思考:为什么普遍都采用数据库存储数据?
    1)数据库是有结构的,数据与数据之间可以建立各种关系,类似网状拓扑图
    2)数据库能够提供各种接口,让数据的处理(增删改查操作)变得快捷简单
    3)给各种语言(PHP、jsp、.net…)提供了完善的接口

数据库分类

RDBMS(关系型数据库)

  1. MySQL,SQL Server,Oracle,DB2 ……
  2. 通过一张张表来建立关联
  3. 基本上都使用SQL语言来管理数据库
    structure query language
    使用Demo
    SELECT * FROM student WHERE name = '小撩';

NoSQL(非关系型数据库)

  1. Not Only SQL
  2. 没有行、列的概念;用JSON来存储数据。
  3. 集合就相当于“表”,文档就相当于“行”。
  4. 标准化和非标准化的摩擦
  5. 标准化限制创新,非标准化不能统一
  6. 特征
    ① 键值(Key-Value)存储数据库
    ② 列存储数据库
    ③ 文档型数据库
    ④ 图形(Graph)数据库
  7. MongoDB、CouchDB、HBase、Redis、…

区分

关系型数据库比较结构化,操作不是很灵活;非关系型数据库操作灵活,但不适合大型数据存储,比较适合微架构……
两者是相互辅助关系!

  1. 数据模型比较简单;
  2. 需要灵活性更强的后台系统;
  3. 对数据库性能要求较高;
  4. 不需要高度的数据一致性。

MongoDB

简介

  1. MongoDB是为快速开发互联网Web应用而设计的数据库系统
  2. MongoDB的设计目标是极简、灵活,经常在Web应用栈的业务层被运用
  3. MongoDB的数据模型是面向文档的,类似于JSON的结构,MongoDB这个数据库中存的是各种各样的JSON

安装

下载MongoDB

https://www.mongodb.org/dl/win32/
MongoDB的版本偶数版本为稳定版,奇数版本为开发版
MongoDB对于32位系统支持不佳,所以3.2版本以后没有再对32位系统的支持

步骤

安装MongoDB的数据库服务器

勾选mogo compass
mongodb compass是图形化管理界面

配置环境变量

C:\Program Files\MongoDB\Server\3.2\bin
图示

在c盘根目录创建一个文件夹data,在data文件夹中创建一个文件夹db

指定端口和路径

在控制台启动MongoDB
mongod --dbpath 路径 --port 端口号
mongod --dbpath C:\data\db

打开命令行

  1. 输入 mongod :启动MongoDB服务器
  2. 32位系统第一次启动:输入 mongod --storageEngine=mmapv1

将MongoDB设置为系统服务

可以自动在后台启动,不需要每次都启动

  1. mkdir c:\data\log 创建Log文件夹
  2. mongod.cfg创建配置文件
    放在C:\Program Files\MongoDB\Server\3.2下
  3. 以管理员的身份打开命令行
    sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
  4. 右击 任务栏 —> 任务管理器 —> 服务 —> 启动MongoDB服务
  5. 如果服务启动失败, 证明上面的操作有误
    控制台输入: sc delete MongoDB 删除之前配置的服务
    重新再来

使用

mongoDB基本组成

  1. 数据库(database):数据库是一个仓库,在仓库中可以存放集合。
  2. 集合(collection):集合类似于数组,在集合中可以存放文档。
  3. 文档(document):文档数据库中的最小单位,我们存储和操作的内容都是文档
  4. 图示

mongoDB的基本指令

  1. show dbs:显示当前所有的数据库
  2. use 数据库名:进入到指定数据库中
  3. db:显示当前所在的数据库
  4. show collections:显示数据库中的所有集合

命令行进行CRUD

  1. 往数据库中插入文档
    db.<collection >.insert(doc)
    举例子:向school数据库中的学生集合student中插入一个新的学生对象{id: “001”, name: “Jack”, age: 18, sex: “男”}

  2. 查询当前集合中所有的文档
    db.<collection>.find();
    非常麻烦,用可视化工具

安装可视化操作软件

mongodbmanagerpro_inst.exe

MongoDB进行CRUD

  1. 插入

  2. 查询

  3. 修改

  4. 删除

熟悉使用

操作1

//1.创建并进入itlike数据库
//2.向数据库的colleges集合中插入六个文档(Html5, Java, Python, 区块链, K12, <PHP, "世界上最好的编程语言">)
//3.查询colleges集合中的文档
//4.向数据库的colleges集合中插入一个文档(Golang)
//5.统计数据库colleges集合中的文档数量
//6.查询数据库colleges集合中name为Html5的文档
//7.向数据库colleges集合中的name为Html5的文档,添加一个intro属性,属性值为"打通全栈任督二脉!"
//8.使用{name:"大数据"} 替换 name 为 "K12"的文档
//9.删除name为PHP的文档的intro属性
//10.向name为Html5的文档中,添加一个classes:{base:["h5+c3","js","jQuery", "abc"] , core:["三大框架","node.js"]}
//11.查询有核心课程为 三大框架 的文档
//12.向name为Html5的文档中,添加一个新的核心课程 "微信小程序"
//13.向name为Html5的文档中,删除基础课程"abc"
//14.删除colleges集合
// 15.删除colleges

//1.创建并进入itlike数据库
use itLike
db
//2.向数据库的colleges集合中插入六个文档(Html5, Java, Python, 区块链, K12, <PHP, "世界上最好的编程语言">)
db.colleges.insert([{name:'Html5'},{name:'Java'},{name:'Python'},{name:'区块链'},{name:'K12'},{name:'PHP',intro:'世界上最好的编程语言'},]);
//3.查询colleges集合中的文档
db.colleges.find();
//4.向数据库的colleges集合中插入一个文档(Golang)
db.colleges.insert([{name:'K12'},]);
//5.统计数据库colleges集合中的文档数量
db.colleges.find().count();
//6.查询数据库colleges集合中name为Html5的文档
db.colleges.find({name:'Html5'});
//7.向数据库colleges集合中的name为Html5的文档,添加一个intro属性,属性值为"打通全栈任督二脉!"
db.colleges.update({name:'Html5'},{$set:{intro:'打通全栈任督二脉'}});
//8.使用{name:"大数据"} 替换 name 为 "K12"的文档
db.colleges.replaceOne({name:'K12'},{name:'大数据'});
//9.删除name为PHP的文档的intro属性
db.colleges.update({name:'PHP'},{$unset:{intro:'世界上最好的编程语言'}});
//10.向name为Html5的文档中,添加一个classesbase:["h5+c3","js","jQuery", "abc"] , core:["三大框架","node.js"]}
db.colleges.update({name:'Html5'},{$set:{classes:{base:["h5+c3","js","jQuery", "abc"] , core:["三大框架","node.js"]}}});
//11.查询有核心课程为 三大框架 的文档
db.colleges.find({'classes.core':'三大框架'});
//12.向name为Html5的文档中,添加一个新的核心课程 "微信小程序"
// ① push 直接添加,不管有没有
db.colleges.update({name:'Html5'},{$push:{'classes.core':'微信小程序'}});
// ② addToSet 如果有就不添加
db.colleges.update({name:'Html5'},{$addToSet:{'classes.core':'微信小程序'}});
//13.向name为Html5的文档中,删除基础课程"abc"
// db。colleges.remove({'classes.base':'abc'});
db.colleges.update({name:'Html5'},{$unset:{'intro.classes.base':'abc'}});
//14.删除colleges集合
db.colleges.remove({});
// 15.删除colleges
db.colleges.drop();

操作2

//15.向集合中中插入10000个文档
//16.查询demos中counter为666的文档
//17.查询demos中counter小于666的文档
//18.查询demos中counter大于666的文档
//19.查询demos中counter大于66小于666的文档
//20.查看demos集合中的前10条数据
//21.查看demos集合中的第11条到20条数据

//16.向集合中中插入10000个文档
for(var i=1;i<=10000;i++){db.demos.insert({counter:i});
}
db.demos.find();
db.demos.remove({});var arr = [];
for(var i=1;i<=10000;i++){arr.push({counter:i});
}
db.demos.insert(arr);
//17.查询demos中counter为666的文档
db.demos.find({"counter":666}).pretty();//18.查询demos中counter小于666的文档
db.demos.find({"counter":{$lt:666}}).pretty();
//19.查询demos中counter大于等于666的文档
db.demos.find({"counter":{$gte:666}}).pretty();//20.查询demos中counter大于66小于666的文档
db.demos.find({"counter":{$lt:70,$gt:66}}).pretty();
//21.查看demos集合中的前10条数据
db.demos.find({}).limit(10).skip(10);
//22.查看demos集合中的第11条到20条数据
db.demos.find({}).limit(10).skip(20);
//23.查看demos集合中的第21条到30条数据

操作3

//24. 创建company数据库, 将itlike和section集合导入到数据库中
//25.查询HTML5学院的所有老师
//26.查询Java学院的所有员工
//27.查询工资大于20000的员工
//28.查询工资在10000-20000之间的员工
//29.查询工资小于10000或大于25000的员工
//30.为所有薪资低于10000的员工增加工资1000元

//24. 创建company数据库, 将itlike和section集合导入到数据库中
show dbs
use company
dbs
db.itlike.insert([
{cno: "1001", cname: "HTML5学院"},
{cno: "1002", cname: "Python学院"},
{cno: "1003", cname: "Java学院"},
{cno: "1004", cname: "Go学院"}
]);db.section.insert([{name: "胡雪", job: "辅导员", wages: 10000.0, cno: "1001", bonus: 1688},{name: "赵乐乐", job: "讲师", wages: 20000.0, cno: "1001", bonus: 2600},{name: "冯璐璐", job: "辅导员", wages: 12000.0, cno: "1001"},{name: "赵晓雪", job: "辅导员", wages: 12000.0, cno: "1002", bonus: 1688},{name: "孙芙蓉", job: "讲师", wages: 13000.0, cno: "1002", bonus: 1288},{name: "胡霍恋", job: "辅导员", wages: 11000.0, cno: "1003", bonus: 2688},{name: "张思琪", job: "班主任", wages: 9000.0, cno: "1003"},{name: "王红叶", job: "辅导员", wages: 8000.0, cno: "1002", bonus: 1675},{name: "叶子奇", job: "高级讲师", wages: 30000.0, cno: "1001", bonus: 2345},{name: "高伟伟", job: "辅导员", wages: 17000.0, cno: "1002", bonus: 1345}
]);
//25.查询HTML5学院的所有老师
var cno = db.itlike.findOne({cname:'HTML5学院'}).cno;
db.section.find({cno:cno});
//26.查询Java学院的所有员工
var cno = db.itlike.findOne({cname:'JAVA学院'}).cno;
db.section.find({cno:cno});
//27.查询工资大于20000的员工
//28.查询工资在10000-20000之间的员工
db.section.find({$or:[{wages:{$lt:10000}},{wages:{$gt:25000}}]});
//29.查询工资小于10000或大于25000的员工
//30.为所有薪资低于10000的员工增加工资1000元
db.section.updateMany({wages:{$lte:10000}},{$inc:{wages:1000}});
db.section.find({});

文档间关系

一对一(one to one)

举例: 身份证 <-> 人
老公 <-> 老婆
在MongoDB,可以通过内嵌文档的形式来体现出一对一的关系

一对多(one to many)/多对一(many to one)

举例: 父母 <-> 孩子
用户 <-> 物品
微博 <-> 评论

可以通过多文档关联

多对多(many to many)

举例: 老师 <-> 学生
品类 <-> 物种
可以通过多文档关联

实操



排序和索引

排序

  1. 查询文档时, 默认情况是按照_id的值进行排列(升序)
  2. sort()可以用来指定文档的排序规则,sort()内部需要传递一个对象来指定文档的排序规则,其中1表示升序,,-1表示降序
  3. limit skip sort的顺序可以任意改变, 运行时会自动调整
  4. 案例
    db.section.find({}).sort({wages: -1, cno:-1});

索引

  1. 在部分需求中, 有时候我们只需要一个文档中的部分数据, 这时候就得通过映射
  2. 在查询时, 可以在第二个参数来设置查询的结果投影
  3. 案例
    db.section.find({}, {name: 1, _id: 0, wages: 1, bonus: 1});

SQL:MongoDB简述相关推荐

  1. Spark - 利用 Spark SQL + MongoDB 对PandaTV主播进行等级分类

    Spark SQL 使用Spark SQL时,最主要的两个组件就是DataFrame和SQLContext. 1. DataFrame DataFrame是一个分布式的,按照命名列的形式组织的数据集合 ...

  2. Mybatis动态sql是做什么的?都有哪些动态sql?简述一下动态sql的执行原理?

    Mybatis的动态sql的作用: 动态sql就是(在进行sql操作的时候)动态的根据属性值(所匹配的条件)来拼接数据库执行的sql语句,也就是多次查询或变更操作,根据传入的属性值不同,动态拼接出不同 ...

  3. mysql 非等值条件 索引_慢SQL简述与定位

    慢SQL日志简述 通过命令和查看日志文件的方式直接查看mysql服务器的慢sql 参数配置 参数作用slow_query_log是否启用 slow_query_log_file日志文件 long_qu ...

  4. mongodb系列~mongodb慢语句(2)

    一简介:今天遇到一个慢日志的排查和解决过程 二 版本:3.0.6 三 架构:分片集群 四 具体过程 1 程序响应很慢,具体日志寻找定点sql(mongodb慢日志记录在log日志里) awk '$NF ...

  5. nodejs操作mongodb增删改查

    1. Mac系统上安装 使用Homebrew安装 $ brew updata // 更新Homebrew的package数据库 $ brew install mongodb 2. 启动MongoDB ...

  6. 什么是 NoSQL 数据库、NoSQL 与 SQL 的区别

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. NoSQL 数据库是针对可扩展性能和无架构数据模型进行了优化的非关系数据库. NoSQL 数据库也因 ...

  7. mongoDB 特别指令用法

    http://apluck.iteye.com/blog/1176160 a.   修改collection集合字段名 参见:http://www.mongodb.org/display/DOCS/U ...

  8. Mongodb最基础入门教程

    Mongodb最基础入门教程 如果想了解一下redis的入门教程,可以去看一下我的上一篇博客 Mongodb的安装大家可以参考一下其他博主的博客,这里我就不做介绍了.不过值得注意的是,在Linux版本 ...

  9. Mongo DB教程及SQL与Mongo DB查询的映射

    目录 介绍 在机器上设置Mongo DB 启动Mongo DB 下载RoboMongo MongoDB术语 MongoDB的要点 查询时间到了 MongoDB函数 MongoDB中的自动递增ID(SQ ...

  10. 深度解析SQL和NoSQL数据库,掌握主流数据库【两万字解析】

    大家好,我是辣条. 大家国庆玩的快乐否,玩开心的兄弟萌评论扣1,觉得不怎么样的兄弟萌扣2,我希望看到大家都是扣1呦,觉得这篇文章对你有帮助的话可以给辣条一个三连呦. 目录 数据库高级特性 一.存储引擎 ...

最新文章

  1. python基本语法语句-python基本语法
  2. 注解赋值可以是方法_P7笔记,把Spring注解讲的明明白白
  3. 【MM配置】Pricing 采购定价过程总览
  4. 什么是滚雪球法的抽样方法?(Snowball sampling、snowballing approach)
  5. 女朋友生气了,日常生活中该具体怎么做才好,才好女朋友开心?
  6. python图片识别验证码软件_python识别图片验证码
  7. 庖丁解牛之spring源码系列二 spring bean生命周期介绍
  8. ubuntu虚拟机全屏显示问题
  9. 大学英语B116-写作
  10. Favoring Curry
  11. 备份一下mysql笔记
  12. Field [price] of type [text] is not supported for aggregation [avg]
  13. 报考华为认证考试流程
  14. 如何用AI伴侣同步测试App Inventor软件
  15. Hadoop修改slaves的主机名,所要修改的文件
  16. 转战博客园,CSDN再见!
  17. 化合物筛选“杀手锏”:高质量化合物库+一站式虚拟筛选,这里都备齐了
  18. None、Null与空字符‘‘什么区别
  19. 黄金斗士原生android,联想黄金斗士S8对比红米Note视频评测
  20. 系统集成项目管理工程师10大管理47个过程域输入输出工具(项目质量管理)

热门文章

  1. 4.DTD - 元素 - 属性
  2. 监控linux内存,系统运维|用 Bash 脚本监控 Linux 上的内存使用情况
  3. css3中的box-sizing的用法
  4. eruda手机端调试神器
  5. 2018大厂高级前端面试题汇总
  6. 通过Visual Studio 2012 比较SQL Server 数据库的架构变更
  7. 把AspDotNetCoreMvc程序运行在Docker上-part3:使用独立的存储容器
  8. js动态计算移动端rem
  9. Java程序员面试宝典--面向对象的基本概念
  10. 32 GroupSock(AddressPortLookupTable)——live555源码阅读(四)网络