关系型数据库有哪些?非关系型数据库有哪些?两者区别
关系型数据库:
Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL。
非关系型数据库:
NoSql、Cloudant、MongoDb、redis、HBase
两种数据库之间的区别:
1、数据存储方式不同。
关系型数据库:一般都有固定的表结构,并且需要通过DDL语句来修改表结构,不是很容易进行扩展
非关系型数据库:存储是基于文档的,K-V键值对的,还有基于图等。对于数据的格式十分灵活没有固定的表结构,方便扩展
2. 可扩展性
关系型数据库: 纵向扩展也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。
非关系型数据库: 横向扩展。非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
3. 数据一致性
非关系型数据库一般强调的是数据最终一致性,
而不像关系型数据库一样强调数据的强一致性
,
非关系型数据库可能更多的偏向于OLAP场景,
(On-Line Analytical Processing)
联机分析处理OLAP:支持复杂的分析操作,侧重决策支持
关系型数据库更多偏向于OLTP场景。
(On-Line Transaction Processing)
联机事务处理OLTP:主要是基本的、日常的事务处理
操作数据库
1.首先打开数据库
2.使用数据库
使用的时候需要重新打开一个cmd命令行。之前打开的数据库的cmd命令行 不能关闭。
使用之前首先需要执行mongo执行, 执行完以后,才可以对数据库进行增删改查操作
//创建 student 数据库
> use student
switched to db student
> db
student
//显示当前的数据库
> show dbs
admin 0.000GB
local 0.000GB
//创建的数据库 student不在数据库的列表中
// 要显示它的话 往student 数据库中插入一些数据。
> db.student.insert({"name":"111"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
local 0.000GB
student 0.000GB
//db 显示当前正在操作的数据库
> db
student
//创建 集合db.createCollection("name","options");
//options :capped 固定集合大小 true/false
//size(可选):为集合指定最大值,即字节数。当 capped为true时 size必须写。
//max (可选):指定固定集合中包含文档的最大数量。
> db.createCollection("teacher")
{ "ok" : 1 }
//显示集合
> show collections
student
teacher
//创建一个集合mycol。整个集合空间大小6142800B,文档最大个数为1000个。
> db.createCollection("mycol",{capped:true,size:6142800,max:1000})
{ "ok" : 1 }
//创建数据库 demo
>use demo
switched to db demo
> db.abc
demo.abc//创建 abc集合
> db.abc.insert({"id":"q"})
> WriteResult({ "nInserted" : 1 })
> show collections
abc
//删除集合
> db.abc.drop()
true
//删除数据库
> show dbs//先看当前数据库有哪些
admin 0.000GB
demo 0.000GB
local 0.000GB
student 0.000GB
> db//再看当前操作的数据库是什么 use xxxx可以切换数据库
demo
> db.dropDatabase()//删除数据库
{ "dropped" : "demo", "ok" : 1 }
> show dbs
admin 0.000GB
local 0.000GB
student 0.000GB
>
增删改查操作
1.插入文档操作
使用 insert() 或 save() 方法向集合中插入文档
save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
insert 和save 的不同点
如果新增的数据中存在主键,
insert()则会抛 org.springframework.dao.DuplicateKeyException 异常
save()则更改原来的内容为新内容。
但是该方法新版本中已废弃,db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
//db.collection.insertOne()单个文档插入到集合中。
//如果文档没有指定_id字段,MongoDB会自动将_id字段与ObjectId值添加到新文档。
> db.teacher.insertOne({"name":"zs","age":"12"})
{
"acknowledged" : true,
"insertedId" : ObjectId("608ab5432f1035dac70050ca")
}
//insertMany([{}])方法将多个文档插入到集合中
> db.teacher.insertMany([{"name":"zs"},{"name":"as"},{"name":"ss"}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("608ab49c2f1035dac70050c6"),
ObjectId("608ab49c2f1035dac70050c7"),
ObjectId("608ab49c2f1035dac70050c8")
]
}
>
2.更新文档
> show dbs
admin 0.000GB
local 0.000GB
student 0.000GB
> use student
switched to db student
> show collections
mycol
student
teacher
> db.teacher.find()
{ "_id" : ObjectId("608ab3f92f1035dac70050c5"), "name" : "zs" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c6"), "name" : "zs" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c7"), "name" : "as" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c8"), "name" : "ss" }
{ "_id" : ObjectId("608ab51d2f1035dac70050c9"), "name" : "zs" }
{ "_id" : ObjectId("608ab5432f1035dac70050ca"), "name" : "zs", "age" : "12" }
// 更新数据 update({},{$set:{}}) 修改第一个匹配的数据
> db.teacher.update({"name":"zs"},{$set:{"name":"tttll"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.teacher.find()
//这个的name的值 变成了tttll
{ "_id" : ObjectId("608ab3f92f1035dac70050c5"), "name" : "tttll" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c6"), "name" : "zs" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c7"), "name" : "as" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c8"), "name" : "ss" }
{ "_id" : ObjectId("608ab51d2f1035dac70050c9"), "name" : "zs" }
{ "_id" : ObjectId("608ab5432f1035dac70050ca"), "name" : "zs", "age" : "12" }
// 更新数据 update({},{$set:{}},{multi:true}) 修改所以匹配到数据
//把所有name是zs的修改为tttll
> db.teacher.update({"name":"zs"},{$set:{"name":"tttll"}},{multi:true})
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
> db.teacher.find()
{ "_id" : ObjectId("608ab3f92f1035dac70050c5"), "name" : "tttll" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c6"), "name" : "tttll" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c7"), "name" : "as" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c8"), "name" : "ss" }
{ "_id" : ObjectId("608ab51d2f1035dac70050c9"), "name" : "tttll" }
{ "_id" : ObjectId("608ab5432f1035dac70050ca"), "name" : "tttll", "age" : "12" }
删除文档操作
> db.teacher.find()
{ "_id" : ObjectId("608ab3f92f1035dac70050c5"), "name" : "tttll" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c6"), "name" : "tttll" }
{ "_id" : ObjectId("608ab49c2f1035dac70050c7"), "name" : "as" }
{ "_id" : ObjectId("608ab51d2f1035dac70050c9"), "name" : "tttll" }
{ "_id" : ObjectId("608ab5432f1035dac70050ca"), "name" : "tttll", "age" : "12" }
> db.teacher.remove({"name":"tttll"})
WriteResult({ "nRemoved" : 4 })
> db.teacher.find()
{ "_id" : ObjectId("608ab49c2f1035dac70050c7"), "name" : "as" }
//插入了四次数据
> db.teacher.insert({"name":"tttll"})
WriteResult({ "nInserted" : 1 })
> db.teacher.find()
{ "_id" : ObjectId("608ab49c2f1035dac70050c7"), "name" : "as" }
{ "_id" : ObjectId("608abb152f1035dac70050cb"), "name" : "tttll" }
{ "_id" : ObjectId("608abb162f1035dac70050cc"), "name" : "tttll" }
{ "_id" : ObjectId("608abb172f1035dac70050cd"), "name" : "tttll" }
{ "_id" : ObjectId("608abb172f1035dac70050ce"), "name" : "tttll" }
> db.teacher.remove({"name":"tttll"},{justOne:true})
WriteResult({ "nRemoved" : 1 })
//db.col.remove({})把满足条件的数据全部删除。
//添加了justOne后 填true 或者1 只会删除一个数据
> db.teacher.remove({})
WriteResult({ "nRemoved" : 4 })
> db.teacher.find()
//db.col.remove({}) 删除所有数据
查询文档
需要以易读的方式来读取数据,可以使用pretty()方法
> db.teacher.find()
>db.teacher.insert({"name":"zz","title":"hh","id":"11","url":"url"})
WriteResult({ "nInserted" : 1 })
> db.teacher.find()
{ "_id" : ObjectId("608abcfc2f1035dac70050cf"), "name" : "zz", "title" : "hh", "id" : "11", "url" : "url" }
> db.teacher.find().pretty()
{
"_id" : ObjectId("608abcfc2f1035dac70050cf"),
"name" : "zz",
"title" : "hh",
"id" : "11",
"url" : "url"
}
//除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。
where 等于
操作 | 格式 |
---|---|
等于 | {:} |
小于 | {:{$lt:}} |
小于等于 | {:{$lte:} |
大于 | {:{$lt:}} |
大于等于 | {:{$lt:}} |
不等于 | {:{$ne:}} |
或者 | {$or:{},{}} |
**数字的数据类型要一致**
//因为我写的时候是字符串的形式 所以找的时候 3也要加""
> db.teacher.find()
{ "_id" : ObjectId("608abf472f1035dac70050d1"), "name" : "zz" }
{ "_id" : ObjectId("608abf472f1035dac70050d2"), "name" : "zx" }
{ "_id" : ObjectId("608abf472f1035dac70050d3"), "name" : "zc" }
//查找条件等于"name":"zx"的数据
> db.teacher.find({"name":"zx"})
{ "_id" : ObjectId("608abf472f1035dac70050d2"), "name" : "zx" }
//查找条件小于"3"的
> db.teacher.find({"id":{$lt:"3"}}).pretty()
{ "_id" : ObjectId("608ac02b2f1035dac70050d4"), "id" : "1", "name" : "aa" }
{ "_id" : ObjectId("608ac0332f1035dac70050d5"), "id" : "2", "name" : "as" }
//查找条件小于等于"3"的
> db.teacher.find({"id":{$lte:"3"}}).pretty()
{ "_id" : ObjectId("608ac02b2f1035dac70050d4"), "id" : "1", "name" : "aa" }
{ "_id" : ObjectId("608ac0332f1035dac70050d5"), "id" : "2", "name" : "as" }
{ "_id" : ObjectId("608ac0372f1035dac70050d6"), "id" : "3", "name" : "as" }
>
//查找条件大于"3"的
> db.teacher.find({"id":{$gt:"3"}}).pretty()
{ "_id" : ObjectId("608ac03b2f1035dac70050d7"), "id" : "4", "name" : "as" }
//查找条件大于等于"3"的
> db.teacher.find({"id":{$gte:"3"}}).pretty()
{ "_id" : ObjectId("608ac0372f1035dac70050d6"), "id" : "3", "name" : "as" }
{ "_id" : ObjectId("608ac03b2f1035dac70050d7"), "id" : "4", "name" : "as" }
//查找id不等于"3"的数据
> db.teacher.find({"id":{$ne:"3"}}).pretty()
{ "_id" : ObjectId("608abf472f1035dac70050d1"), "name" : "zz" }
{ "_id" : ObjectId("608abf472f1035dac70050d2"), "name" : "zx" }
{ "_id" : ObjectId("608abf472f1035dac70050d3"), "name" : "zc" }
{ "_id" : ObjectId("608ac02b2f1035dac70050d4"), "id" : "1", "name" : "aa" }
{ "_id" : ObjectId("608ac0332f1035dac70050d5"), "id" : "2", "name" : "as" }
{ "_id" : ObjectId("608ac03b2f1035dac70050d7"), "id" : "4", "name" : "as" }
//or 两个条件满足一个就行
> db.teacher.find({$or:[{"name":"aa"},{"id":"3"}]})
{ "_id" : ObjectId("608ac02b2f1035dac70050d4"), "id" : "1", "name" : "aa" }
{ "_id" : ObjectId("608ac0372f1035dac70050d6"), "id" : "3", "name" : "as" }
//and 两个条件必须都要满足
> db.teacher.find({"name":"aa","id":"1"})
{ "_id" : ObjectId("608ac02b2f1035dac70050d4"), "id" : "1", "name" : "aa" }
//and or联用
> db.teacher.find({"id":{$lt:"3"},$or:[{"name":"aa"},{"name":"as"}]}).pretty()
{ "_id" : ObjectId("608ac02b2f1035dac70050d4"), "id" : "1", "name" : "aa" }
{ "_id" : ObjectId("608ac0332f1035dac70050d5"), "id" : "2", "name" : "as" }
>