• MongoDB与Mysql常用命令解释


    原文

    本文旨在介绍MongoDB,Mysql的常用命令:将MongoDB 和传统的关系型数据库的常用命令对照起来学习,更加便于记忆和理解。

    MongoDB是由数据库(database/repository)、集合(collection)、文档对象(document三个层次组成。MongoDB中集合对应关系型数据库里的表,但是集合中没有列、行和关系的概念,这体现了模式自由的特点。

    传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成, 

    常用命令介绍:

    MySQL

    MongoDB

    说明

    mysqld

    mongod

    服务器守护进程

    mysql

    mongo

    客户端工具

    mysqldump

    mongodump

    逻辑备份工具

    mysql

    mongorestore

    逻辑恢复工具

    db.repairDatabase()

    修复数据库

    mysqldump

    mongoexport

    数据导出工具

    source

    mongoimport

    数据导入工具

    grant * privileges on *.* to …

    Db.addUser()

    Db.auth()

    新建用户并权限

    show databases

    show dbs

    显示库列表

    Show tables

    Show collections

    显示表列表

    Show slave status

    Rs.status

    查询主从状态

    Create table users(a int, b int)

    db.createCollection("mycoll", {capped:true,

    size:100000}) 另:可隐式创建表。

    创建表

    Create INDEX idxname ON users(name)

    db.users.ensureIndex({name:1})

    创建索引

    Create INDEX idxname ON users(name,ts DESC)

    db.users.ensureIndex({name:1,ts:-1})

    创建索引

    Insert into users values(1, 1)

    db.users.insert({a:1, b:1})

    插入记录

    Select a, b from users

    db.users.find({},{a:1, b:1})

    查询表

    Select * from users

    db.users.find()

    查询表

    Select * from users where age=33

    db.users.find({age:33})

    条件查询

    Select a, b from users where age=33

    db.users.find({age:33},{a:1, b:1})

    条件查询

    select * from users where age<33

    db.users.find({'age':{$lt:33}})

    条件查询

    select * from users where age>33 and age<=40

    db.users.find({'age':{$gt:33,$lte:40}})

    条件查询

    select * from users where a=1 and b='q'

    db.users.find({a:1,b:'q'})

    条件查询

    select * from users where a=1 or b=2

    db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )

    条件查询

    select * from users limit 1

    db.users.findOne()

    条件查询

    select * from users where name like "%Joe%"

    db.users.find({name:/Joe/})

    模糊查询

    select * from users where name like "Joe%"

    db.users.find({name:/^Joe/})

    模糊查询

    select count(1) from users

    Db.users.count()

    获取表记录数

    select count(1) from users where age>30

    db.users.find({age: {'$gt': 30}}).count()

    获取表记录数

    select DISTINCT last_name from users

    db.users.distinct('last_name')

    去掉重复值

    select * from users ORDER BY name

    db.users.find().sort({name:-1})

    排序

    select * from users ORDER BY name DESC

    db.users.find().sort({name:-1})

    排序

    EXPLAIN select * from users where z=3

    db.users.find({z:3}).explain()

    获取存储路径

    update users set a=1 where b='q'

    db.users.update({b:'q'}, {$set:{a:1}}, false, true)

    更新记录

    update users set a=a+2 where b='q'

    db.users.update({b:'q'}, {$inc:{a:2}}, false, true)

    更新记录

    delete from users where z="abc"

    db.users.remove({z:'abc'})

    删除记录

    db. users.remove()

    删除所有的记录

    drop database IF EXISTS test;

    use test

    db.dropDatabase()

    删除数据库

    drop table IF EXISTS test;

    db.mytable.drop()

    删除表/collection

    db.addUser(‘test’, ’test’)

    添加用户

    readOnly-->false

    db.addUser(‘test’, ’test’, true)

    添加用户

    readOnly-->true

    db.addUser("test","test222")

    更改密码

    db.system.users.remove({user:"test"})

    或者db.removeUser('test')

    删除用户

                                                                 

    use admin

    超级用户

    db.auth(‘test’, ‘test’)

    用户授权

    db.system.users.find()

    查看用户列表

    show users

    查看所有用户

    db.printCollectionStats()

    查看各collection的状态

    db.printReplicationInfo()

    查看主从复制状态

    show profile

    查看profiling

    db.copyDatabase('mail_addr','mail_addr_tmp')

    拷贝数据库

    db.users.dataSize()

    查看collection数据的大小

    db. users.totalIndexSize()

    查询索引的大小

     mongodb语法

    MongoDB的好处挺多的,比如多列索引,查询时可以用一些统计函数,支持多条件查询,但是目前多表查询是不支持的,可以想办法通过数据冗余来解决多表查询的问题。

    MongoDB对数据的操作很丰富,下面做一些举例说明,内容大部分来自官方文档,另外有部分为自己理解。

    查询colls所有数据

    db.colls.find() //select * from colls

    通过指定条件查询

    db.colls.find({‘last_name’: ‘Smith’});//select * from colls where last_name=’Smith’

    指定多条件查询

    db.colls.find( { x : 3, y : “foo” } );//select * from colls where x=3 and y=’foo’

    指定条件范围查询

    db.colls.find({j: {$ne: 3}, k: {$gt: 10} });//select * from colls where j!=3 and k>10

    查询不包括某内容

    db.colls.find({}, {a:0});//查询除a为0外的所有数据

    支持<, <=, >, >=查询,需用符号替代分别为$lt,$lte,$gt,$gte

    db.colls.find({ “field” : { $gt: value } } ); 

    db.colls.find({ “field” : { $lt: value } } ); 

    db.colls.find({ “field” : { $gte: value } } );

    db.colls.find({ “field” : { $lte: value } } );

    也可对某一字段做范围查询

    db.colls.find({ “field” : { $gt: value1, $lt: value2 } } );

    不等于查询用字符$ne

    db.colls.find( { x : { $ne : 3 } } );

    in查询用字符$in

    db.colls.find( { “field” : { $in : array } } );

    db.colls.find({j:{$in: [2,4,6]}});

    not in查询用字符$nin

    db.colls.find({j:{$nin: [2,4,6]}});

    取模查询用字符$mod

    db.colls.find( { a : { $mod : [ 10 , 1 ] } } )// where a % 10 == 1

    $all查询

    db.colls.find( { a: { $all: [ 2, 3 ] } } );//指定a满足数组中任意值时

    $size查询

    db.colls.find( { a : { $size: 1 } } );//对对象的数量查询,此查询查询a的子对象数目为1的记录

    $exists查询

    db.colls.find( { a : { $exists : true } } ); // 存在a对象的数据

    db.colls.find( { a : { $exists : false } } ); // 不存在a对象的数据

    $type查询$type值为bsonhttp://bsonspec.org/数 据的类型值

    db.colls.find( { a : { $type : 2 } } ); // 匹配a为string类型数据

    db.colls.find( { a : { $type : 16 } } ); // 匹配a为int类型数据

    使用正则表达式匹配

    db.colls.find( { name : /acme.*corp/i } );//类似于SQL中like

    内嵌对象查询

    db.colls.find( { “author.name” : “joe” } );

    1.3.3版本及更高版本包含$not查询

    db.colls.find( { name : { $not : /acme.*corp/i } } );

    db.colls.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );

    sort()排序

    db.colls.find().sort( { ts : -1 } );//1为升序2为降序

    limit()对限制查询数据返回个数

    db.colls.find().limit(10)

    skip()跳过某些数据

    db.colls.find().skip(10)

    snapshot()快照保证没有重复数据返回或对象丢失

    count()统计查询对象个数

    db.students.find({‘address.state’ : ‘CA’}).count();//效率较高

    db.students.find({‘address.state’ : ‘CA’}).toArray().length;//效率很低

    group()对查询结果分组和SQL中group by函数类似

    distinct()返回不重复值


    连接MYSQL

      格式: mysql -h主机地址 -u用户名 -p用户密码

      1、例1:连接到本机上的MYSQL。

      首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

      2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

      mysql -h110.110.110.110 -uroot -pabcd123

      (注:u与root可以不用加空格,其它也一样)

      3、退出MYSQL命令: exit (回车)

      注意:想要成功连接到远程主机,需要在远程主机打开MySQL远程访问权限

      方法如下:

      在远程主机中以管理员身份进入

      输入如下命令

      mysql>GRANT ALL PRIVILEGES ON *.* TO 'agui'@%'IDENTIFIED BY '123' WITH GRANT OPTION;

      FLUSH PRIVILEGES;

      //赋予任何主机访问数据的权限

      mysql>FLUSH PRIVILEGES

      //修改生效

      agui为我们使用的用户名

      密码为123

      即:在远程主机上作好设置,我们即可通过mysql -h110.110.110.110 -uagui -p123连接进远程主机

    修改和取消MySQL超级用户root密码

            (一)、密码的修改:

    使用mysqladmin命令 
    1、例如你的 root用户现在没有密码,你希望的密码修改为abc,那么命令是:mysqladmin -u root password abc 
    2、如果你的root现在有密码了,那么修改密码为abc的命令是:mysqladmin -u root -p password ‘newpassword'
    注意,命令回车后会问你旧密码,输入旧密码之后命令完成,密码修改成功。 
     

              (二)、密码的消除 
    1、以root登录:mysql -u root -p 
    2、mysql>use mysql; 
    3、mysql>update user set password='' where user='root'; 
    重启mysql服务就生效了。

    修改Mysql中普通用户的密码:

           1.直接在数据库中修改记录
    mysql> use mysql
    mysql> update user set password = password(”new_password”) where user = “user_name”;
    mysql> flush privileges;
    其实这种方法就是更新一条数据库记录,与普通update语句不同的是,密码加密存储,需用password()函数来生成,另一个不同点是需要刷新权限表。

           2.在数据库中运行set password
    mysql> set password for user_name = password(”new_password”);
    mysql> flush privileges;
    同第一种方法,也要刷新权限表

           3.直接在shell环境运行mysqladmin
    > mysqladmin -u user_name -p password “new_password”
    > mysqladmin flush-privileges
    这个方法我试了几次,每次都能将密码记录修改掉,但是每次修改后都无法登录,即使重启数据库也无济于事。所以建议不要采用本方法修改用户密码,尤其是root密码。

           4.grant all privileges on db.table to user_name@localhost identified by “your_pwd”;
    用户名密码的生效不必用flush privileges刷新
    注:
    db.table: db表示授权哪个库,table是相应库里的表。可以用*.*表示所有库所有表。注意,如果想表示某个库的所有表,必须用db_name.*,后面的”.*”不可省略,否则权限将无法赋予。
    user_name@localhost: user_name表示用户名,localhost表示该用户只能在本地访问该库,可以用%表示从任何地方访问该库,也可以用111.11.22.33来表示地址
    your_pwd: 给用户设置的密码

    Mysql创建普通用户

    1.使用

    insert into mysql.user(Host,User,Password) values("localhost","ea",password("ea"));

    时有可能遇到:Field 'ssl_cipher' doesn't have a default value的错误。

    GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

    “username”替换为将要授权的用户名,比如clientusr;

    “password”替换为clientusr设置的密码;

    locaohost可以改为%,方便你从别的IP登录。

    如:GRANT USAGE ON *.* TO 'ea'@'localhost' IDENTIFIED BY 'ea' WITH GRANT OPTION;

    然后对你建的用户进行授权

    GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON tablename.*  TO 'username'@'localhost' IDENTIFIED BY 'password';

    本语句中的权限根据实际需要确定:

    "tablename"替换为授权访问的数据表table名

    "username"是步骤2授权用户名

    "password"是步骤2授权用户的设置密码

    这样就为该用户授予了对某数据表的SELECT, INSERT, UPDATE, DELETE, CAREATE, DROP权限。

    如: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON easy_activity.*  TO 'ea'@'localhost' IDENTIFIED BY 'ea';

    生效授权:一句话即可:FLUSH PRIVILEGES;

    用MySQL创建数据库和数据库表

    1、使用SHOW语句找出在服务器上当前存在什么数据库:

    mysql> SHOW DATABASES; 
    +----------+ 
    | Database | 
    +----------+ 
    | mysql | 
    | test | 
    +----------+ 
    3 rows in set (0.00 sec)

    2、创建一个数据库abccs 
    mysql> CREATE DATABASE abccs; 
    注意不同操作系统对大小写的敏感。 
    3、选择你所创建的数据库 
    mysql> USE abccs 
    Database changed 
    此时你已经进入你刚才所建立的数据库abccs. 
    4、 创建一个数据库表 
    首先看现在你的数据库中存在什么表: 
    mysql> SHOW TABLES; 
    Empty set (0.00 sec) 
    说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable:   我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。 
    mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), 
    -> birth DATE, birthaddr VARCHAR(20)); 
    Query OK, 0 rows affected (0.00 sec)

    由 于name、birthadd的列值是变化的,因此选择VARCHAR,其长度不一定是20。可以选择从1到255的任何长度,如果以后需要改变它的字 长,可以使用ALTER TABLE语句。);性别只需一个字符就可以表示:"m"或"f",因此选用CHAR(1);birth列则使用DATE数据类型。 
    创建了一个表后,我们可以看看刚才做的结果,用SHOW TABLES显示数据库中有哪些表: 
    mysql> SHOW TABLES; 
    +---------------------+ 
    | Tables in menagerie | 
    +---------------------+ 
    | mytables | 
    +---------------------+

    5、显示表的结构: 
    mysql> DESCRIBE mytable; 
    +-------------+-------------+------+-----+---------+-------+ 
    | Field | Type | Null | Key | Default | Extra | 
    +-------------+-------------+------+-----+---------+-------+ 
    | name | varchar(20) | YES | | NULL | | 
    | sex | char(1) | YES | | NULL | | 
    | birth | date | YES | | NULL | | 
    | deathaddr | varchar(20) | YES | | NULL | | 
    +-------------+-------------+------+-----+---------+-------+ 
    4 rows in set (0.00 sec)

    6、 往表中加入记录 
    我们先用SELECT命令来查看表中的数据: 
    mysql> select * from mytable; 
    Empty set (0.00 sec)
    这说明刚才创建的表还没有记录。 加入一条新记录: 
    mysql> insert into mytable 
    -> values (′abccs′,′f′,′1977-07-07′,′china′); 
    Query OK, 1 row affected (0.05 sec)

    再用上面的SELECT命令看看发生了什么变化。我们可以按此方法一条一条地将所有员工的记录加入到表中。 
    7、用文本方式将数据装入一个数据库表 
    如果一条一条地输入,很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。创建一个文本文件“mysql.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以在CREATE TABLE语句中列出的列次序给出,例如: 
    abccs f 1977-07-07 china   
    mary f 1978-12-12 usa 
    tom m 1970-09-02 usa

    使用下面命令将文本文件“mytable.txt”装载到mytable表中:mysql> LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet; 
    再使用如下命令看看是否已将数据输入到数据库表中:mysql> select * from mytable;
  • 相关阅读:
    镜像的上传和下载
    ps 命令
    过滤不合格数据
    云计算5-3-2法则
    Python Django初入门
    python web框架
    BootStrap、EasyUI、JQueryUI
    JS正则
    ngonx FastCGI 相关参数调优
    Windows10远程连接错误-出现身份验证错误
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/3699275.html
Copyright © 2020-2023  润新知