关系型数据库有哪些?非关系型数据库有哪些?两者区别
关系型数据库:
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")