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可以用來丟擲特定欄位。