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 != "蒙古"
- }
- })
来源: http://www.bubuko.com/infodetail-2853615.html