MySQL 是一个功能齐全的开源关系数据库管理系统(RDBMS)。它将数据存储在分组到数据库中的表中,使用结构化查询语言(SQL)来访问数据,并使用“SELECT”,“UPDATE”,“INSERT”和“DELETE”等命令来管理它。相关信息可以存储在不同的表中,但JOIN操作的使用允许您关联它,跨各种表执行查询并最小化数据重复的可能性。MySQL几乎兼容所有操作系统,即Windows,Linux,Unix,Apple,FreeBSD等等。它支持各种存储引擎,如InnoDB(它是默认的),Federated,MyISAM,Memory,CSV,Archive,Blackhole和Merge。

简要概念

关系型数据库。

在不同的引擎上有不同 的存储方式。

查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。

开源数据库的份额在不断增加,mysql的份额页在持续增长。

缺点就是在海量数据处理的时候效率会显著变慢。

MongoDB 是一个流行的开源文档导向数据库。文档创建并存储在BSON文件中,二进制JSON(JavaScript Object Notation)格式,因此所有JS类型的数据都是支持的。MongoDB通常应用于Node.js项目。除此之外,JSON还可以使用人类可读的格式在服务器和Web应用程序之间传输数据。在存储容量和速度方面,它也是一个更好的选择,因为它提供更高的效率和可靠性。MongoDB提供的最大好处之一是使用动态模式,无需预先定义结构,如字段或值类型。这种模型允许分层关系表示,数组存储,以及通过简单地添加或删除字段来更改记录结构的能力。这种NoSQL解决方案具有嵌入,自动分片和板载复制功能,可实现更好的可扩展性和高可用性。

非关系型数据库(nosql ),属于文档型数据库。先解释一下文档的数据库,即可以存放xml、json、bson类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。

存储方式:虚拟内存+持久化。

查询语句:是独特的Mongodb的查询方式。

适合场景:事件的记录,内容管理或者博客平台等等。

架构特点:可以通过副本集,以及分片来实现高可用。

数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。

成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。

优势:

  • 快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快,
  • 高扩展!
  • 自身的Failover机制!
  • json的存储格式!

缺点:主要是无事物机制!

具体特点总结如下:

(1)面向集合存储,易于存储对象类型的数据

(2)模式自由

(3)支持动态查询

(4)支持完全索引,包含内部对象B

(5)支持复制和故障恢复

(6)使用高效的二进制数据存储,包括大型对象(如视频等)

(7)自动处理碎片,以支持云计算层次的扩展性

(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及C++语言的驱动程序,社区中也

提供了对 Erlang 及.NET 等平台的驱动程序

(9) 文件存储格式为 BSON(一种 JSON 的扩展)

MongoDB实现增删改查基本命令 mongod: 打开或者新建一个数据库 :mongod --dbpath dir

mongoinport: 导入mongo文件 :mongoinport --db test --collection user --drop --file C:\User\mongodb\document.json

–db 导入到哪个库 –collection 导入到哪个集合 –drop 加上就表示清空原有文档 –file 要导入的文件

mongo: 创建一个新的库 :use dbname 查看所有库 :show dbs 查看当前库所有集合 :show collection

增加: 在名为collectionName的集合中插入一条文档,如果集合不存在,则新建该集合 :db.collectionName.insert(obj)

例子:在student集合中插入文档

db.student.insert({     id:101,     name: '张三',      sex: '男',     address: '广东' })查询: 查找名为collection集合的所有文档 :db.collectionName.find()

查询k的值为v的文档 : db.collectionName.find({k : v})

查询k1的值为v1 且 k2的值为v2的文档 :db.collectionName.find({k1 : v1},{k2 : v2})

查询k1的值为v1 或 k2的值为v2的文档 :db.collectionName.find($or : {k1 : v1},{k2 : v2})

查询k的值大于v的文档,$ gte大于等于(>=) : db.collectionName.find({k : {$gt:v}})

查询k的值小于v的文档,$ lte小于等于(<=) : db.collectionName.find({k : {$lt:v}})

查询前三条数据 :db.collectionName.find().limit(3)

修改: 修改文档

db.collectionName.update(     {k1 : v1},   //修改k1的值为v1的文档     {         $set:{k2 : v2, k3 : v3},     } )替换文档

db.collectionName.update{     {k1 : v1},     {         k2 : v2,         k3 : v3     } }删除: 删除当前所在的数据库 :db.dropDatabase()

删除集合 :db.collectionName.drop()

删除匹配到的所有k为v值的文档 :db.collectionName.remove({k : v})

删除第一个匹配到的所有k为v值的文档 :db.collectionName.remove({k : v},{justOne:true})

清空集合 :db.collectionName.remove({})

排序

db.collectionName.find().sort({k1 : 1},{k2 : -1}) 按照k1来排序、如果k1的值相同、按照k2来排序、1代表升序、-1降序

统计条数

db.collectionName.count({k : v})模糊查询 查询有XXX

db.collectionName.find({k : /模糊查询字符串/}) //比如查询名字包含"定"字的人: db.collectionName.find({name:/定/}) 查询以XXX开头

db.collectionName.find({k : /^字符串/}) //比如查询名字以"郑"开头的人: db.collectionName.find({name:/^郑/}) 查询以XXX字结尾

db.collectionName.find({k : /字符串$/}) //比如查询名字以"移"字结尾的人: db.collectionName.find({name:/移$/}) 包含

db.collectionName.find({k : {$in[v1,v2]}})    //比如查询userid字段包含3和4的文档: db.collectionName.find({userid:{$in["3","4"]}}) 不包含

db.collectionName.find({k : {$nin[v1,v2]}}) //查询userid字段不包含2和3的文档: db.collectionName.find({userid:{$nin["2","3"]}})六、Docker安装MongoDB 在宿主机创建 mongo 容器

docker run -id --name=ktc_mongo -p 27017:27017 mongo 远程登陆

mongo 192.168.12.128 MongoDB客户端操作起来未免太过复杂,因此我们采用第三方的可视化工具来帮我们操作MongoDB,就类似于我们使用Navicat来操作MySQL一样

七、MongoDB的可视化工具 1、NoSQLBooster for MongoDB 2、Robo 3T

比较:

数据库

MongoDB

MySQL

数据库模型

非关系型

关系型

存储方式

以类JSON的文档的格式存储

不同引擎有不同的存储方式

查询语句

MongoDB查询方式(类似JavaScript的函数)

SQL语句

数据处理方式

基于内存,将热数据存放在物理内存中,从而达到高速读写

不同引擎有自己的特点

成熟度

新兴数据库,成熟度较低

成熟度高

广泛度

NoSQL数据库中,比较完善且开源,使用人数在不断增长

开源数据库,市场份额不断增长

事务性

仅支持单文档事务操作,弱一致性

支持事务操作

占用空间

占用空间大

占用空间小

join操作

MongoDB没有join

MySQL支持join

kali mysql的db文件 mysql可以打开db文件吗_mysql