什么是数据库?
存储数据的容器,比如TXT文档,json文件、xml文件、execl、MySQL、Oracle、mongodb、redis、sqlite、office access、office Vf、sqlserver、db2;
专业数据库存储软件:MySQL、Oracle、SqlServer、db2、mongodb
常规使用的关系型数据库:mysql,Oracle、SqlServer,这些数据库的语法统一遵循使用sql语法
为什么是关系型数据库
就一个例子:需要给你做一套软件,这套软件就需要数据库去存储数据,比如要存储:员工信息(工号、姓名、年龄、生日),员工考勤(工号,迟到,早退,请假,旷工),部门信息(部门名称,部门人员),工资表(底薪,绩效、提成、考勤扣款、加班费)
关系型数据库需要提前定义好数据结构(表结构);数据如果不符合数据结构的特征会无法存储或报错(比如数据库定义了:工号,姓名,年龄、但是实际的数据是:地址,爱好等操作,这是无法存储的)
一般的非关系型数据库都是nosql(不需要sql语法,一般都是实体对象,通过使用对象的属性或方法来操作数据),非关系数据库往往不需要提前定义好数据结构,以mongodb来说,存储数据的时候使用的是类似json的bson,比如[{name:‘lisi’},{name:‘zhangsan’}],一般在设计的时候需要专门给一台数据库服务器。建立一个公司的服务器结构需要很多服务器(逻辑处理服务器,视频处理服务器,文件服务器,数据库服务器)
常规 的数据使用一般可以分为:关系型数据库和非关系型数据库(nosql)
mongod的服务器启动命令:
mongod --dbpath 文件夹路径
mongod的客户端使用命令:
mongo
注意通过mongo命令只是连接上了数据库服务器,数据库服务器上还有很多数据库,我们真正要操作的是这些数据库
数据库->集合->数据
show dbs:列出当前所有数据库,默认列出(admin、config、和local三个数据库),都是默认的,不要删除和修改
db:显示当前正在操作的数据库(默认都是test,为什么test没有在show dbs命令中显示呢?因为当前test数据库里面还没有数据)
数据库操作
use:如果数据库存在切换到当前数据库,如果不存在则创建,例如:use student
db.dropDatabase():删除数据库(需要使用use先切换到被删除的数据库上)
集合操作
db.createCollection(‘集合名字’):创建一个集合
show collections:显示当前数据库的集合列表
db.集合名字.drop():删除指定集合
C creat R read U update D delete 增删改查
1.新增操作
db.集合名字.insert({接送数据}),示例:db.movie.insert({name:‘ze’,age:10})
db.集合名.insert([{json数据},{json数据},…]) ,新增多条数据
示例:db.insert.([{name:‘ss’,age:10},{name:‘ww’,age:11}])
db.集合名.insertOne.({json数据}),示例:db.movie.insertOne({name:‘aa’,age:12}) 将单个文档插入到一个集合,
db.集合名.insertMany([{json数据},{json数据},…]),示例:db.movie.insertMany([{name:‘q’},{name:‘w’}]) 将文档数组插入到一个集合,
2.查询操作
db.集合名.find(), 示例:db.movie.find()
db.集合名.find().pretty(), 示例:db.movie.find().pretty();pretty没有实际的含义,仅在命令行或查询客户端可用,在代码中不可用
带条件的查询
db.film.find();等价于db.film.find({}) 示例:db.film.find({name:‘lisi’}) 查询film集合中name等于lisi的数据
且操作
db.film.find({name:‘lisi’,age:15}) 查询film集合中name等于lisi且age等于20的数据,如果不存在则没有返回
或操作
db.film.find({$or:[{name:‘lisi’,age:10},{name:‘wangwu’}]}) if((name==‘lisi’&&age25)||(name’wangwu’))
非操作($ne not equa)
db.film.find({name:{$ne:‘lisi’}}) 查询film集合中name不等于lisi的数据
$in
db.film.find({age:{$in:[20,30,40]}}) 查询film集合中age在[20,30,40]集合中的数据,注意不是在20~40这个区间
大于操作($gte great than equa)
db.film.find({age:{$gt:20}}) 查询年龄大于20岁的
大于等于操作($gte great than equa)
db.film.find({age:{$gte:20}}) 查询年龄大于等于20岁的
小于操作($lt less than)
db.film.find({age:{$lt:20}}) 查询年龄小于20岁的
小于等于操作($lte less than equa)
db.film.find({age:{$lte:20}}) 查询年龄小于等于20岁的
排序
db.film.find().sort({age:-1}).pretty() 按照年龄的降序排序,如果为1表示按照年龄升序排序
db.film.find().sort({age:-1,name:-1}).pretty() 多排序条件的情况,当第一排序条件age无法筛选数据的时候会根据第二排序条件name在排
分页
page | 1 | 2 | 3 |
---|---|---|---|
skip | 0 | 3 | 6 |
公式:(page-1)*3
db.film.find().skip(0).limit(3).pretty(); 从0开始查询查询3tiao
db.film.find().skip(3).limit(3).pretty(); 从3开始查询查3条
db.film.find().skip(6).limit(3).pretty(); 从6开始查询查3条
3.更新操作
db.集合名字.update({查询条件},{KaTeX parse error: Expected 'EOF', got '}' at position 11: set:{修改内容}}̲) 示例 db.film.u…set:{age:20}}) 注释:查询name等于lisi的数据,把这条数据的age修改为20;注意update只修改满足查询条件的第一条数据(比如name=lisi 的人有很多,但是只修改第一条)
db.film.updateMany({查询条件},{$set:{修改内容}}),用来修改所有满足条件的数据
db.film.updateOne({查询条件},{$set:{修改内容}}) 用来修改所有满足查询条件的第一条数据
db.film.update({’_id’:ObjectId(‘5d846a006902035830294317’)},{$set{age:88}}) 根据id来修改 ObjectId(“5d846a006902035830294317”)
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{currentDate:{lastModify:true}}) true 表示添加当前时间
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{inc:{age:1}}) 当前age+1 如果是-1表示age减1
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{mul:{age:2}}) 当前age乘2
$min(给定值小于已有值才更新,否则不更新)
$max(给定值大于已有值才更新,否则不更新)
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{rename:{title:‘brand’}}) 修改后数据不在有title字段,被修改成brand字段
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{unset:{brand:’’}}) 执行后brand字段和其内容就被删除了
修改数组的操作
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{push:{title:‘阿里’}}) 如果title字段不存在则新增该字段,且该字段为数组,内容为[‘阿里’],$push已有字段的时候,该字段需要是数组才行,否则报错
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{pop:{car:‘BMW’}}) 把car数组中所有内容为BMW的元素删除
KaTeX parse error: Expected '}', got 'EOF' at end of input: …{name:'lisi'},{set:{‘car.0’:‘BMW’}}) ;把car数组中的第0个元素内容修改为BMW; db.film.update({name:‘lisi’},{$set:{‘car.1’:‘BMW’}});把car数组中的第一元素内容修改为BMW
4.删除操作
db.集合名.remove({查询条件});示例:db.film.remove({name:‘lisi’}) 删除所有满足条件的数据
db.集合名.deleteOne({查询条件});示例:db.film.deleteOne({name:‘lisi’}) 删除满足条件的第一个数据
db.集合名.deleteMany({查询条件});示例:db.film.deleteMany({name:‘lisi’}) 删除所有满足条件的数据