SQL: mysql,Oracle,sqlserver,db2
特點及應用場景:
1.高度事務性場景---> 銀行,會計,倉庫,貿易,需要大量的原子操作
2.數據存儲有規范的表結構設計,預先定義好 明確的字段
3.數據價值高,對安全性和穩定性要求高
4.需要持久化存儲的"冷數據"(不需要經常讀寫的數據)
5.需要通過SQL語言來支持的場景
NoSQL:
redis: key:value(string,list,hash,set,zset)
mondodb : {name : "小明", age : 18}
1.靈活的數據結構,需要事先設計 數據的增刪改 的字段
2.高度收縮性場景,社交網絡,熱點資訊
3.處理熱數據(需要經常讀寫的數據)
4.更容易擴展
每個數據庫都有固定的端口:
mysql:3306, redis:6379, MongoDB:27017
========================MongoDB常用的命令
MongoDB的命令前一個單詞小寫,后面單詞的首字母大寫!!!
1.啟動服務端:sudo mongod
2.啟動shell客戶端:mongo
3.查看所有數據庫--->show dbs
4.切換數據庫------>use.數據庫名
5.查看當前所在的數據庫---->db
6.查看當前所在數據庫里面的所有集合(相當於MySQL的表)--->show collections
7.查看數據庫指定集合里面的所有數據--->db.集合名.find()
8.刪除當前數據庫--->db.dropDatabase()
9.退出------>Ctrl+C
用戶認證方式注意事項:
1. 第一次啟動MongoDB是沒有用戶的,所以按 普通方式啟動 MongoDB服務,然后再創建 root 用戶。
2. 第二次啟動MongoDB服務已經用戶了,所以按 --auth 方式啟動MongoDB服務,然后再切換用戶。
==========================>使用MongoDB命令的注意點
1.在使用MongoDB命令時,如果命令是一個單詞,則默認小寫,
如果是多個單詞組合,則第一個單詞默認小寫,后面單詞的首字母大寫,如:刪除當前數據庫的命令dropDatabase()
2.MongoDB命令的參數傳遞:一般都是以鍵值對的形式傳遞
3.一個MongoDB可以有多個數據庫,一個數據庫可以有多個集合,
一個集合可以有多條數據(data),每條數據都是字典鍵值對形式進行保存
4.MongoDB的數據庫不需要提前創建,通過use 數據庫名,可以直接切換使用,如果數據庫里面沒有數據,則不會被創建,
數據庫里面有數據才會被創建
========================>MongoDB數據庫的增.刪.改.查.
--------------------MongoDB數據庫的增加:(insert)
1.直接增加一個文檔:
db.stu.insert({_id : 1, name "諸葛亮", age : 45, hometown : "蜀國"})
2.先創建一個空文檔,再按照字段進行增加:
data = {}
data._id = 2
data.name = "劉備"
data.age = 48
data.hometown = "蜀國"
db.stu.insert(data)
--------------------MongoDB數據庫的刪除(remove)
1.remove(age:32) 默認刪除符合條件的所有數據
# 刪除年齡為32的所有數據
db.stu.remove({age:32})
2.remove({age:32},{justone:true}),添加第二個參數,則表示只刪除滿足條件的第一條數據
db.stu.remove({age:32},{justOne:true})
3.remove({}) 添加空條件,則刪除所有數據
4.db.stu.drop() 刪除當前數據庫
--------------------MongoDB數據庫的更新:(update)
1.update() 接收兩個參數,第一個參數指定要更新的數據,第二個參數是更新后的參數
如果有兩條數據都滿足第一個參數,則只更新第一條數據
db.stu.update({age:32},{age:33}) # 表示把年紀為32的數據用年紀33來替換,_id不變,其他全部被替換
2.不做全部替換,只替換指定字段
# 通過$set修飾,只處理指定字段,有則修改,沒有則增加
db.stu.update({age:32},{$set: {age:33,position:"丞相"}})
3.update()默認只處理滿足條件的第一條數據,給update()添加第三個參數,處理全部滿足條件的數據
db.stu.update({age:32},{$set:{age:33,hometwon:"蜀國"}},{multi:true})
--------------------MongoDB數據庫的增加 + 修改:(save)
save() 根據id值進行處理:
1.如果id不存在,則增加該數據
db.stu.save({_id:4,name:"趙雲",age:34,hometwon:"蜀國"})
2.如果id存在,則修改數據
db.stu.save({_id:4,name:"姜維",age:34,hometwon:"蜀國"})
insert(),update(),save()的使用區別:
insert()只能新增沒有的id,如果該id值存在,則會報錯
update()可以修改指定字段,而save()不能
--------------------MongoDB數據庫的查詢 (find())
1.find()不指定查詢條件,則默認查詢全部
2.findOne()只查詢第一條數據
3.比較運算符(主要是數字之間的比較)
大於:$gt,大於或等於:$gte
小於:$lt,小於或等於:$lte
不等於:$ne
4.邏輯運算符 表示多個獨立條件的邏輯關系
默認是and鏈接
db.stu.find({age:18,hometwon:"桃花島"})
# 表示兩個獨立的條件邏輯關系and
db.stu.find({$and:
[{age:18},{hometown:"桃花島"}]
})
# 表示兩個獨立的條件邏輯關系or或
db.stu.find({$or:[{age:18},{hometown:"桃花島"}]})
# 范圍運算符in
db.stu.find({age:{$in:[18,20,16,40,45]}})
db.stu.find({hometown:{$in:["桃花島","大理","蒙古"]}})
正則表達式
用"//"表示通過正則表達式查詢
db.stu.find({name:/^黃/})
用regex來表示正則表達式查詢
db.stu.find({name:{$regex:"^黃"}})
7. 自定義函數查詢
# 迭代每一個文檔並判斷該文檔的 hometown是否不等於 蒙古,如果條件成立則符合查詢
db.stu.find({$where : function() {return this.hometown != "蒙古"} })