博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL与MongoDB的操作对比,以及区别
阅读量:4164 次
发布时间:2019-05-26

本文共 2662 字,大约阅读时间需要 8 分钟。

MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库也叫文档型数据库,是一种NoSQL的数据库。它们各有各的优点,关键是看用在什么地方。所以我们所熟知的那些SQL(全称Structured Query Language)语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言。

 

    以我们公司项目为例,在早期的项目中,都在使用关系型数据库,用过SQLServer,Oracle,DB2,后来全部转向Mysql,原因很简单:Mysql在性能不错的情况下,有着开源优势。Mysql的事务性与高性能是我们主要考虑的。后来,由于项目要用到用户系统,即会有大量的用户数据进行交互--海量存储,Mysql的读写速度会有一点瓶颈,于是我们就想到了最近发展很强势的Nosql。在Nosql早期的memcache的发展下,又出现了很多非关系型数据库,比如redis,mongodb。经过一段时间的测试,redis与mongodb的读写速度确实比Mysql有着很明显的优势。mongodb的写入速度大约2.5W/次每秒。
 
    mongodb以BSON结构(二进制)进行存储,对海量数据存储有着很明显的优势。下面是Mongodb与Mysql的操作命令的对比。

作用

MySQL

MongoDB

 

 

 

服务器守护进程

mysqld

mongod

客户端工具

mysql

mongo

逻辑备份工具

mysqldump

mongodump

逻辑还原工具

mysql

mongorestore

数据导出工具

mysqldump

mongoexport

数据导入工具

source

mongoimport

 

 

 

新建用户并授权

grant all on *.*

to username@'localhost'
 identified by 'passwd';

db.addUser("user","psw")

db.auth("user","psw")

显示库列表

show databases;

show dbs

进去库

use dbname;

use dbname

显示表列表

show tables;

show collections

查询主从状态

show slave status;

rs.status

创建库

create database name;

无需单独创建,直接use进去

创建表

create table tname(id int);

无需单独创建,直接插入数据

删除表

drop table tname;

db.tname.drop()

删除库

drop database dbname;

首先进去该库,db.dropDatabase()

 

 

 

插入记录

insert into tname(id) value(2);

db.tname.insert({id:2})

删除记录

delete from tname where id=2;

db.tname.remove({id:2})

修改/更新记录

update tname set id=3

where id=2;

db.tname.update({id:2},

{$set:{id:3}},false,true)

 

 

 

查询所有记录

select * from tname;

db.tname.find()

查询所有列

select id from tname;

db.tname.find({},{id:1})

条件查询

select * from tname where id=2;

db.tname.find({id:2})

条件查询

select * from tname where id < 2;

db.tname.find({id:{$lt:2}})

条件查询

select * from tname where id >=2;

db.tname.find({id:{$gte:2}})

条件查询

select * from tname where id=2

and name='steve';

db.tname.find({id:2,

name:'steve'})

条件查询

select * from tname where id=2

or name='steve';

db.tname.find($or:[{id:2},

{name:'steve'}])

条件查询

select * from tname limit 1;

db.tname.findOne()

 

 

 

模糊查询

select * from tname where name

like "%ste%";

db.tname.find({name:/ste/})

模糊查询

select * from tname where name

like "ste%";

db.tname.find({name:/^ste/})

 

 

 

获取表记录数

select count(id) from tname;

db.tname.count()

获取有条件

的记录数

select count(id) from tname

where id=2;

db.tname.find({id:2}).count()

查询时去掉

重复值

select distinct(last_name)

from tname;

db.tname.distinct('last_name')

 

 

 

正排序查询

select *from tname order by id;

db.tname.find().sort({id:1})

逆排序查询

select *from tname

order by id desc;

db.tname.find().sort({id:-1})

 

 

 

取存储路径

explain select * from tname

where id=3;

db.tname.find({id=3}).explain()

特别要注意的是:mongodb插入多个字段语法
> db.user.insert({id:1,name:'steve',sex:'male'})  正确
> db.user.insert({id:2},{name:'bear'},{sex:'female'})  错误
转载:
你可能感兴趣的文章
如果在linux下指定在不被4整除的内存地址上写入int型变量会发生什么
查看>>
64位与32位linux c开发时默认字节对齐值
查看>>
malloc(malloc在32位编译系统中分配的地址会8字节对齐,64为编译系统中会8或者16字节对齐)
查看>>
初始化时共享内存的key值和信号量初始化的key值可以一样
查看>>
linux c/c++ 解决隐式声明与内建函数不兼容问题
查看>>
pthread的pthread_join()函数理解实验
查看>>
LINUX SIGNAL信号标志详解
查看>>
【Linux函数】Signal ()函数详细介绍
查看>>
linux创建线程之pthread_create
查看>>
pthread_attr_init线程通俗举例讲解与线程属性
查看>>
进程和线程的区别
查看>>
int main(int argc,char* argv[])详解,以及与int main()有什么区别
查看>>
SourceInsight全工程查找替换方法
查看>>
linux根据进程号PID查找启动程序的全路径(程序实现根据PID进程号得到进程名字或根据进程名字取得进程号)
查看>>
linux命令详解:md5sum命令
查看>>
C语言chdir()函数:改变当前的工作目录
查看>>
拷贝目录里面的文件夹里面内容到同样名字的目录中
查看>>
linux sync命令到底做了什么(结合项目中遇到的问题)
查看>>
如果指针指向了文件中的内容,外部修改了此指针指向地址的内容,文件也会修改
查看>>
进程间通信之:socket
查看>>