数据库:在计算机中长期帮应用存储数据的。
数据库两大类:
1. 关系型数据库 : Mysql orcale sqlserver …
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。
优点:
1、易于维护:都是使用表结构,格式一致;
Mysql orcale sqlserve都是基于SQL语句的,格式是非常像的。
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
多表查询,表关联的操作,事务操作,触发器。。。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
操作sql语句,内部非常耗性能。
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
2. 非关系型数据库:mongodb、redis ...
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
{ key : value }
mongodb -> 文档 类似于JSON的数据 ,数据库底层存储的是 二进制JSON(BSON)
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
存储类型会更多,布尔值、数组、对象。。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
水平扩容比较好,并发多了,可以添加数据库服务器做分布式即可。
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
关联表的功能,主键和外键,锁的概念。
公司 -> 小项目 -> 一款数据库
-> 大项目 -> 多款数据库混合使用 :缓存数据库、资源数据库、web数据库、存储数据库 ...
node + mysql -> 可以的 php + mysql
node + mongodb -> 更多的选择
//-----------------------------------------------
mongodb的具体操作:
1. 下载软件:https://www.mongodb.com/try/download/community
3.2.10版本
2. 把bin目录添加到环境变量中,这样可以全局访问。
3. 启动数据库 : 默认端口号:27017 ,修改加 --port
mongod --dbpath=d:/mdb3
4. 操作数据库:
1. 命令行如何操作mongodb
1. mongo 进行 操作环境
2. 用可视化工具
Robo 3T 1.3.1
mongodb命令行语法:
show dbs : 查看所有数据库,但是如果这个数据库是空的,是不显示的。
local -> 初始是有值的数据库
test -> 空的数据库
use [dbname] -> 切换数据库
use [dbname] -> 如果dbname不存在,那么就创建一个数据库,并且切换到这个数据上
db.createCollection([collname]) -> 创建一个集合
db.dropDatabase() : 删除当前数据库
可以具体查看mongod相关方法有哪些:
db.help() : 看数据库的方法
db.test.help() : 看test数据库的方法
db.test.find().help() : 看find()方法下的方法
Collection聚集集合操作:
db.createCollection('musiclist') 创建一个集合
db.getCollection('musiclist') 查看musiclist集合
db.getCollectionNames() : 查看当前数据下的所有集合
show collections : 可以查看现在有多少个集合
db.printCollectionStats() : 查看集合的状态
db.musiclist.drop() : 删除集合
数据库的增删改查:crud操作。
增:
db.集合名.insert({}); //单条添加
db.集合名.insert([{},{},{}]); //多条添加
db.集合名.insertMany([{},{},{}]); //多条添加
db.集合名.save({}); //单条添加
db.集合名.save([{},{},{}]); //多条添加
删:
db.集合名.deleteOne({})
db.musiclist.deleteOne({users:"张杰2"}) 删除一条数据
db.musiclist.deleteMany({users:"张杰2"}) 删除所有数据
db .集合名.remove({users:"张杰2"}) 删除所有数据
db .集合名.remove({users:"张杰2"},true) 删除一条数据
db .集合名.remove({}) : 删除所有
db.集合名.drop()
删除当前集合
改:
第一个参数:条件 , 第二个参数是修改的字段
db.集合名.update({},{$set:{users:"张杰"}}) 修改第一条数据
db.集合名.update({},{$set:{users:"张杰"}}) 如何写了条件,就会根据条件中的第一个进行修改
db.集合名.update({},{$set:{users:"张杰2"}},{multi:true}) : 修改多条数据
如果$set设置的字段不存在的话,就会创建后赋值,新添加字段的操作。
$set -> 修改字段值,$inc -> 累加累减字段值(必须是数字类型)
$inc -> 点赞、投票、播放量、粉丝数 ...
db.集合名.updateOne()
查:
db.集合名.find() : 查看当前集合的所有数据
db.集合名.find().count() : 数据的个数
db.集合名.find({}) : 条件
类似sql : select * from musicList where id = 1
db.集合名.find({"_id":/users/}) : 进行模糊匹配
类似sql : like
需求:搜索的需求
db.集合名.find({},{name:1,age:1}) : 查询指定字段的数据
类似于sql中的 select name,age from musiclist
name : 1 -> 要name字段
name : 0 -> 排除掉name字段
db.集合名.find().sort({age : 1}) : 排序
1 升序 -1 降序
db.集合名.find().skip(10) : 跳过10条
一般limit和skip一起使用,可以做分页的处理
db.集合名.findOne() : 找一条数据(默认就是第一条)