1. 程式人生 > >Mysql和MongoDB常用操作總結

Mysql和MongoDB常用操作總結

目錄:

1.Mysql和mongoDB

2.1 Mysql

2.1.1使用資料庫

2.1.2操作資料庫

2.2 MongoDB

2.2.1基礎操作

2.2.2聚合

1.Mysql和mongoDB

mysql是關係型資料庫,能非常好的進行表之間的連線,而mongoDB則可以算是非關係型資料庫,善於處理文字資料,以下是一些常用的操作。

2.1 Mysql

2.1.1使用資料庫

登陸mysql資料庫

mysql -h 主機名 -u使用者名稱 -p

  • -h : 該命令用於指定客戶端所要登入的MySQL主機名, 登入當前機器該引數可以省略;
  • -u : 所要登入的使用者名稱;
  • -p : 告訴伺服器將會使用一個密碼來登入, 如果所要登入的使用者名稱密碼為空, 可以忽略此選項。

建立資料庫

createdatabase 資料庫名

例如,要建立一個名為huaixian的資料庫:

create database huaixian character set gbk

為了便於在命令提示符下顯示中文, 在建立時通過 character set gbk 將資料庫字元編碼指定為 gbk。建立成功時會得到 Query OK, 1 row affected(0.02sec) 的響應。

注:可以使用show database檢視已經建立的資料庫

選擇要操作的資料庫

一: 在登入資料庫時指定, 命令: mysql -D 所選擇的資料庫名 -h 主機名 -u 使用者名稱 -p

例如登入時選擇剛剛建立的資料庫: mysql -D huaixian -u root -p

二: 在登入後使用 use 語句指定, 命令: use 資料庫名;

use 語句可以不加分號, 執行 use huaixian 來選擇剛剛建立的資料庫, 選擇成功後會提示: Database changed

建立資料庫表

create table 表名稱(列聲名)

以建立學生資訊表為例:

createtable students

     (

           id int unsigned not nullauto_increment primary key,

           name char(8) not null,

           sex char(4) not null,

           age tinyint unsigned not null,

           tel char(13) null default"-"

     );

  • "id" ,name為列的名稱;
  • "int",char 指定該列的型別為 int(取值範圍為 -8388608到8388607), 在後面我們又用 "unsigned" 加以修飾, 表示該型別為無符號型, 此時該列的取值範圍為 0到16777215;
  • "not null" 說明該列的值不能為空, 必須要填, 如果不指定該屬性, 預設可為空;
  • "auto_increment" 需在整數列中使用, 其作用是在插入資料時若該列為 NULL, MySQL將自動產生一個比現存值更大的唯一識別符號值。在每張表中僅能有一個這樣的值且所在列必須為索引列。
  • "primary key" 表示該列是表的主鍵, 本列的值必須唯一, MySQL將自動索引該列。

2.1.2操作資料庫

插入資料

insert語句可以用來將一行或多行資料插到資料庫表中, 使用的一般形式如下:

insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

其中 [ ] 內的內容是可選的, 例如, 要給 huaixian資料庫中的 students 表插入一條記錄, 執行語句:

insertinto students values(NULL, "王剛", "男", 20,"13811371377");

注:插入部分資料也可不按照列的順序進行插入

查詢資料

select語句常用來根據一定的查詢規則到資料庫中獲取資料, 其基本的用法為:

select 列名稱 from表名稱 [查詢條件];

條件查詢

where關鍵詞用於指定查詢條件,用法形式為: select 列名稱 from表名稱where 條件;

以查詢所有性別為女的資訊為例, 輸入查詢語句: select * from students wheresex="女";

更新資料

update語句可用來修改表中的資料, 基本的使用形式為:

update 表名稱 set 列名稱=新值 where 更新條件;

刪除資料

delete語句用於刪除表中的資料,基本用法為:

delete from 表名稱 where刪除條件;

LIKE字句

 LIKE子句中使用百分號 %字元來表示任意字元,類似於UNIX或正則表示式中的星號 *

如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的。

Select * from 表名稱 where匹配的欄位 LIKE 匹配目標

排序

語句使用 ORDER BY 子句將查詢資料排序後再返回資料。

可以使用任何欄位來作為排序的條件,從而返回排序後的查詢結果,還可以設定多個欄位來排序,使用 ASC 或 DESC 關鍵字來設定查詢結果是按升序或降序排列。 預設情況下,它是按升序排列。

Selece * from 表名 order by要排序的欄位

分組

GROUPBY 語句根據一個或多個列對結果集進行分組。

在分組的列上我們可以使用 COUNT, SUM, AVG,等函式。

Select * from 表名 group by分組的列


2.2 MongoDB

2.2.1基礎操作

MongoDB是由C++語言編寫的,是一個基於分散式檔案儲存的開源資料庫系統。將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB 文件類似於 JSON 物件。欄位值可以包含其他文件,陣列及文件陣列。

 

與mysql不同的是,MongoDB使用的是集合(collections)和文件(Document)。

使用資料庫

檢視當前使用資料庫:db

切換資料庫:use <database>

檢視所有資料庫:show databases

使用集合:db.myCollection.find()

插入記錄

插入一條記錄:db.collection.insertOne()

插入多條記錄:db.collection.insertMany()

插入一條或者多條:db.collection.insert()

查詢記錄

查詢所有記錄:     db.inventory.find({} )

     等同於關係資料庫:SELECT * FROM inventory

查詢條件:db.inventory.find( { status: " D " } )

正則查詢:db.inventory.find({item: /^p/})

查詢範圍:db.inventory.find( { status: { $in: ["A", "D" ] } } )

OR查詢: db.inventory.find( { $or: [ {status: "A" }, { qty: { $lt: 30 } } ] } )

AND查詢: db.inventory.find( { status:" A ", qty: { $lt: 30 } } )

查詢內嵌文件:db.inventory.find( {" size.uom " :" in " }

條件操作符

常見的操作符 <、<=、>、>=,分別表示為$lt、$lte、$gt、$gte,如:

     db.collection.find({“age”:{ $gt :15}});

     db.collection.find({“age”:{ $gt :15, $lt :30}});

匹配查詢

查詢所有陣列包含red的 :db.inventory.find({ tags: "red" } )

需滿足$all的所有值 :db.inventory.find({ tags: { $all: [“red”, “blank”] } } )

用於統計陣列中的元素個數,

能匹配到以下查詢,

     db.inventory.find({ “tags”: { $size: 3 } } )

但不能匹配到以下查詢,

     db.inventory.find({ "tags": { $size: 4 } } )

limit和skip

limit()方法接受一個數字引數,引數指定從MongoDB取的記錄條數:db.inventory.find({}).limit(4)

使用skip()方法來跳指定數量的資料,skip方法同接受一個數字引數作記錄條數

 : db.inventory.find({}).skip(10)

排序

sort()方法可以通過引數指定排序的欄位,並使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而-1是用於降序排列。

db.inventory.find().sort({qty:1})

     db.inventory.find().sort({qty:-1})

全文索引

 

建立索引:db.stores.createIndex( { name: "text", description:"text" } )

查詢:db.stores.find( { $text: { $search: "java coffee shop" }} )

查詢2:db.stores.find( { $text: { $search: “java \”coffee shop\“” } } )

剔除關鍵字:db.stores.find( { $text: { $search: “java shop -coffee” } } )

查詢score排序: db.stores.find( { $text: { $search:“java coffee shop” } }, { score: { $meta: “textScore” } } ).sort( { score: {$meta: "textScore" } } )

此外,還可以通過distinct去重,mod取餘,exists判斷欄位是否存在。

2.2.2聚合

簡介

聚合(aggregate)主要用來於處理資料(諸如統計平均值,求和等),並返回計算後的資料結果 。

管道(pipeline)概念指的是能夠在一些輸入上執行一個操作,然後將輸出結果用作下一個 命令的輸入。 db.collection.aggregate()是基於資料處理的聚合管道,每個文件通過一個由多個階段(stage) 組成的管道,可以對每個階段的管道進行分組、過濾等功能,然後經過一系列的處理,輸出 相應的結果。

語法

db.collection.aggregate(pipeline, options)

pipeline 型別是Array 語法:db.collection.aggregate( [ { <stage> }, ... ] )

常見pipeline有:$match:查詢匹配$project:指定返回欄位

$limit、$sort、$skip、$count

$unwind:拆分陣列 $group:聚合的配置

$group操作

語法:{ $group: { _id: <expression>, <field1>:{ <accumulator1> :

<expression1> }, ... } }

[

{$match: {status: “A”}},
{$group: {_id: “$cust_id”, total: {$sum: “$amount”}}}

]

_id代表你想聚合的資料的主鍵,你想聚合所有cust_id相同的條目的 amount的總和,那_id即被設定為cust_id。_id為必須,但是可以填寫一個空值。

total代表最後想輸出的資料之一,這裡total是每條結果中amount的總和。 $sum是一個聚合的操作符,另外的操作符你可以在官方文件中找到。上面的命令表示對相同主鍵(_id)下的amount進行求和。

常用的聚合操作符:

$sum:計算總和。

$avg:計算平均值。

$min:根據分組,獲取集合中所有文件對應值得最小值。

$max:根據分組,獲取集合中所有文件對應值得最大值。

$push:將指定的表示式的值新增到一個數組中。

$addToSet:將表示式的值新增到一個集合中(無重複值)。

$first:返回每組第一個文件,如果有排序,按照排序,如果沒有按照預設的儲存的順序的第一個文件。

$last:返回每組最後一個文件,如果有排序,按照排序,如果沒有按照預設的儲存的順序的最後一個

$unwind

語法: 1.{ $unwind: <field path> }

2. {$unwind: {

path:<field path>,
includeArrayIndex: <string>,preserveNullAndEmptyArrays: <boolean>

}}

例項:

資料:{ "_id" : 1, "item" : "ABC1", sizes:[ "S", "M", "L"] }

命令:db.inventory.aggregate( [ { $unwind : "$sizes" } ] )

此外,還有$project可以用來丟擲特定欄位。