MongoDB與Mysql經常使用命令解釋

原文mysql

本文旨在介紹MongoDB,Mysql的經常使用命令:將MongoDB 和傳統的關係型數據庫的經常使用命令對照起來學習,更加便於記憶和理解。正則表達式

MongoDB是由數據庫(database/repository)、集合(collection)、文檔對象(document三個層次組成。MongoDB中集合對應關係型數據庫裏的表,可是集合中沒有列、行和關係的概念,這體現了模式自由的特色。sql

 

傳統的關係數據庫通常由數據庫(database)、表(table)、記錄(record)三個層次概念組成, mongodb

 

經常使用命令介紹:

 

MySQLshell

MongoDB數據庫

說明數組

mysqld服務器

mongodapp

服務器守護進程ide

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:鏈接到本機上的MYSQL。

  首先在打開DOS窗口,而後進入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車後提示你輸密碼,若是剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車便可進入到MYSQL中了,MYSQL的提示符是:mysql>

  二、例2:鏈接到遠程主機上的MYSQL。假設遠程主機的IP爲:110.110.110.110,用戶名爲root,密碼爲abcd123。則鍵入如下命令:

  mysql -h110.110.110.110 -uroot -pabcd123

  (注:u與root能夠不用加空格,其它也同樣)

  三、退出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命令 
一、例如你的 root用戶如今沒有密碼,你但願的密碼修改成abc,那麼命令是:mysqladmin -u root password abc 
二、若是你的root如今有密碼了,那麼修改密碼爲abc的命令是:mysqladmin -u root -p password ‘newpassword'
注意,命令回車後會問你舊密碼,輸入舊密碼以後命令完成,密碼修改爲功。 
 

          (二)、密碼的消除 
一、以root登陸:mysql -u root -p 
二、mysql>use mysql; 
三、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建立數據庫和數據庫表

一、使用SHOW語句找出在服務器上當前存在什麼數據庫:

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

二、建立一個數據庫abccs 
mysql> CREATE DATABASE abccs; 
注意不一樣操做系統對大小寫的敏感。 
三、選擇你所建立的數據庫 
mysql> USE abccs 
Database changed 
此時你已經進入你剛纔所創建的數據庫abccs. 
四、 建立一個數據庫表 
首先看如今你的數據庫中存在什麼表: 
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 | 
+---------------------+

五、顯示錶的結構: 
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)

六、 往表中加入記錄 
咱們先用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命令看看發生了什麼變化。咱們能夠按此方法一條一條地將全部員工的記錄加入到表中。 
七、用文本方式將數據裝入一個數據庫表 
若是一條一條地輸入,很麻煩。咱們能夠用文本文件的方式將全部記錄加入你的數據庫表中。建立一個文本文件「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;
相關文章
相關標籤/搜索