数据库简介
什么是数据库?
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定规律的,否则查询的效率会很低。
数据库的种类:
- 关系型:Oracle、MySQL、SQlite、SQL Server 等
- 非关系型(Not Only SQL):MongoDB(文档)、Redis/Memcache(内存)
关系型数据库和非关系型数据库软件的区别:
- 相同点:都是数据库软件,用来存放项目数据
- 不同点:
关系型:1、遵守 SQL 标准。2、有库和表约束。
菲关系型:1、没有统一标准。2、一般按键值对形式存储。3、读取速度更快。
MongoDB 简介
基于分布式文件存储数据库,C++ 语言编写,支持的数据结构非常松散,是类似 json 的 bson 格式(后期修改插入数据写 JSON)
MongoDB 基本操作
基本概念
- 生活中:仓库、架子、物品
- 计算机:数据库(database)、集合(collection)、数据/文档(document)
查看数据库
语法:show dbs
选择数据库
语法:use 数据库名称
隐式创建:在 MongoDB 中选择不存在的数据库不会报错,后期当该数据库有数据时系统自动创建。
查看集合
语法:show collections
创建集合
语法:db.createCollection('集合名称')
删除集合
语法:db.集合名.drop()
返回布尔值
删除数据库
1、通过 use
语法选中数据库
2、通过 db.dropDatabase()
语法删除
MOngoDB 文档增删改查(CURD)
C增
语法:db.集合名.insert(JSON数据)
说明:集合存在,则直接插入数据;集合不存在,隐式创建
练习:在 test1 数据库的 c1 集合中插入数据(姓名:Tom,年龄:18岁)
use test1
db.c1.insert({name:"Tom", age:18})
数据库和集合不存在都隐式创建,对象的键统一不加引号方便看,但是查看集合数据时系统会自动添加引号。
MongoDB 会给每条数据增加一个唯一的 _id
键。
_id 的组成:
自定义 _id 值:给需要插入的 JSON 数据增加 _id 键即可覆盖(但不推荐)
db.c1.insert({_id:1,name:"Tom", age:18})
插入多条数据:传递数组,数组中写一个个 JSON 数据即可
db.c1.insert([
{name:"Tom", age:18},
{name:"Jack", age:18},
{name:"Sookie", age:18}
])
快速插入10条数据:MongoDB 底层使用 JS 引擎实现,所以支持部分 JS 语法,可以使用 for 循环。
在 test1 数据库 c2 集合中插入10条数据,分别为 a1 a2 … a10
for (var i = 0, i < 10, i++) {
db.c2.insert({usename:"a" + i,age:i})
}
for 循环式一条一条插入,前九条的提示看不到,最后一条提示可以出现。
R查
语法:db.集合名.find(条件 [,查询的列])
条件 | 写法 |
---|---|
查询所有数据 | {} 或者不写 |
查询 age = 6 的数据 | {age: 6} |
查询 age = 6 又要 sex = ‘男’ 的数据 | {age: 6, sex: ‘男’} |
查询的列(可选参数) | 写法 |
---|---|
查询全部列(字段) | 不写 |
只显示 age 列(字段) | {age: 1} |
除了 age 列都显示 | {age: 0} |
不管你怎么写,系统自定义的 _id 都存在。
升级语法
db.集合名.find({键:{运算符:值}})
运算符 | 作用 |
---|---|
$gt | 大于 |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于等于 |
$ne | 不等于 |
$in | in |
$nin | not in |
如果你需要以易读的方式来读取数据,可以使用 pretty()
方法:
db.集合名.find().pretty()
pretty()
方法以格式化的方式来显示所有文档。
U改
语法:db.集合名.update(条件, 新数据 [, 是否新增, 是否修改多条])
- 是否新增:指条件匹配不到数据则插入
true
是插入,false
不插入(默认) - 是否修改多条:指将匹配成功的数据都修改
true
是,false
否(默认)
练习1:将 {uname: “zs01”} 改为 {uname: “zs11”}
> db.c1.find()
{ "_id" : ObjectId("5f38cefdb762859e025bb2d7"), "name" : "Tom", "age" : 18 }
{ "_id" : ObjectId("5f3908f022e8660eba92139c"), "uname" : "zs01", "age" : 1 }
{ "_id" : ObjectId("5f3908f022e8660eba92139d"), "uname" : "zs11", "age" : 2 }
{ "_id" : ObjectId("5f3908f022e8660eba92139e"), "uname" : "zs21", "age" : 3 }
{ "_id" : ObjectId("5f3908f022e8660eba92139f"), "uname" : "zs31", "age" : 4 }
{ "_id" : ObjectId("5f3908f022e8660eba9213a0"), "uname" : "zs41", "age" : 5 }
{ "_id" : ObjectId("5f3908f022e8660eba9213a1"), "uname" : "zs51", "age" : 6 }
{ "_id" : ObjectId("5f3908f022e8660eba9213a2"), "uname" : "zs61", "age" : 7 }
{ "_id" : ObjectId("5f3908f022e8660eba9213a3"), "uname" : "zs71", "age" : 8 }
{ "_id" : ObjectId("5f3908f022e8660eba9213a4"), "uname" : "zs81", "age" : 9 }
{ "_id" : ObjectId("5f3908f022e8660eba9213a5"), "uname" : "zs91", "age" : 10 }
> db.c1.update({uname:"zs01"},{uname:"zs11"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.c1.find()
{ "_id" : ObjectId("5f38cefdb762859e025bb2d7"), "name" : "Tom", "age" : 18 }
{ "_id" : ObjectId("5f3908f022e8660eba92139c"), "uname" : "zs11" }
{ "_id" : ObjectId("5f3908f022e8660eba92139d"), "uname" : "zs11", "age" : 2 }
{ "_id" : ObjectId("5f3908f022e8660eba92139e"),