zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    环境是如何建立的 启动文件有什么
    环境中存储的是什么
    串行 并行 异步 同步
    TPC-H is a Decision Support Benchmark
    进程通信类型 管道是Linux支持的最初Unix IPC形式之一 命名管道 匿名管道
    删除环境变量
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
    14.3.2.1 Transaction Isolation Levels 事务隔离级别
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/3699275.html
Copyright © 2011-2022 走看看