目录

关系型数据库与非关系型数据库

关系型数据库

关系型数据库特点

关系型数据库优缺点 

非关系型数据库

非关系型数据库特点

非关系型数据库优缺点 

MongoDB数据库

关于数据库的一些术语

使用mongoDB原因

在命令行中操作数据库

node.js操作mongondb

node.js操作mysql数据库

方式一

案例 

方式二

关系型数据库与非关系型数据库

关系型数据库

典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织

常见的关系型数据库:mysql、sqlserver、oracle  

关系型数据库特点

  • sql语句增删改查操作
  • 保持事务的一致性,事务机制

关系型数据库优缺点 

优点

  1. 易于维护:都是使用表结构,格式一致
  2. 使用方便:sql语言通用,可用于复杂查询
  3. 复杂操作的支持:支持sql,可用于一个表以及多个表之间复杂的查询

缺点

  1. 读写性能比较差:尤其是海量数据的高效读写
  2. 固定的表结构:灵活度稍欠
  3. 高并发读写需求:传统的关系型数据库,硬盘IO是一个很大的瓶颈

非关系型数据库

严格上来说不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等

常见非关系型数据库:mongoDB、Redis 

非关系型数据库特点

  • no sql:not only sql
  • 轻量、高效、自由

非关系型数据库优缺点 

优点

  1. 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等,使用灵活,应用场景广泛,而关系型数据库则只是支持基础类型
  2. 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘
  3. 高扩展性
  4. 成本低:nosql数据库部署简单基本上都是开源软件

缺点

  1. 不提供sql支持
  2. 无事务处理
  3. 数据结构相对复杂,复杂查询方面稍欠 

关系型数据库与非关系型数据库的区别

  1. 关系型数据库与非关系型数据库的主要差异是数据的存储方式。关系型数据库是天然的表格式的,因此存储在数据表的行与列中。数据表可以彼此关联协作储存,也很容易提取数据与
  2. 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常储存在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素

MongoDB数据库

关于数据库的一些术语

使用mongoDB原因

  • 由于mongoDB独特的数据处理方式,可以将热点数据加载到内存,故而对查询来讲会非常快(当然也会非常消耗内存)
  • 由于采用了BSON(二进制JSON)的方式存储数据,故而对JSON格式数据具有非常好的支持性以及友好的表结构修改性
  • 文档的存储方式,数据友好可见
  • 数据库的分片集群负载具有非常好的扩展性以及非常不错的自动故障转移

在命令行中操作数据库

创建/切换数据库:use 数据库名 

注意:如果想让数据库被查询出来,一定要向数据库中放第一个表 

删除集合:db.集合名.drop()

注意:添加多个数据时字段的key可以不一样,同时key,value的个数也可以不一样

db.users.save([{name:"lili",age:8},{username:"lan",password:123}])

 

node.js操作mongondb

npm初始化:npm init

在项目内安装mongon模块:npm i mongoose

引入mongodb模块:const mongo=require("mongoose")

//连接数据库
const mongo=require("mongoose")
//协议/地址:端口号/数据库名
//插入集合和数据,db_name数据库会自动创建
mongo.connect("mongodb://127.0.0.1:27017/db_name")
//限制模型
const UserType={
    username:String,
    password:String,
    age:Number
}
//插入数据库
//创建一个模型(user,限制类型),一一对应我们数据库的集合(users)
//模型创建之后,那么会就会新创建一个users的集合(默认加一个s)
const userModle=mongo.model("user",new mongo.Schema(UserType))
//理解:我们用mongo创造一个user的模型,这个模型就是为了限制mongodb的自由,通过Schema
//根据限制模型插入数据
userModle.create({
    username:"lili",password:"4321",age:78
}).then(data=>{
    console.log(data);
})

//更新数据——updateOne更新时若找到多项匹配的则只更新第一个updateMang则更新全部
userModle.updateMany({username:"lili"},{age:56,password:"7890"}).then(data=>{
    console.log(data);
})

//删除数据
userModle.deleteOne({username:"lili"}).then(data=>{
    console.log(data);
})

//查询所有数据
userModle.find().then(data=>{
    console.log(data);
})

//查询特定数据,显示username,password
//方式一
userModle.find({age:28,username:"lin"},{age:0}).then(data=>{
    console.log(data);
})
//方式二
userModle.find({age:28,username:"lin"},["username","password"]).then(data=>{
    console.log(data);
})

node.js操作mysql数据库

dept表

方式一

初始化npm:npm init

安装MySQL模块:npm i mysql2

引入mysql模块:const mysql2=require("mysql2") 

创建连接池操作sql:

const promisePool=mysql2.createPool({

        host:"127.0.0.1",

        port:3306,

        user:"root",

        password:"root",

        database:"cgb",

        connectionLimit:1//创建1个连接池就可以了

    }).promise()

调用sql语句:连接池.query(sql语句)

案例 

const express=require("express")
const app=express()
//引入mysql模块
const mysql2=require("mysql2")
app.get("/",async(req,res)=>{
    //创建连接池进行操作
    const promisePool=mysql2.createPool({
        host:"127.0.0.1",
        port:3306,
        user:"root",
        password:"root",
        database:"cgb",
        connectionLimit:1//创建1个连接池就可以了
    }).promise()
    //通过promisePool进行sql调用
    var dname="research"
    //注意:如果往sql里面传值则模板字符串的取值外面必须加“”
    var dept= await promisePool.query(`select * from dept where dname="${dname}"`)
    //第二种方式——query()第二个参数作为?所对应的数组,?可以为多个
    var dept1=await promisePool.query("select * from dept where dname=?",[dname])
   console.log(dept1[0]);
    res.send(dept[0])
})
app.listen(3000,()=>{
    console.log("server start");
})

方式二

初始化npm:npm init

安装MySQL模块:npm i mysql

//导入mysql依赖包
var mysql=require("mysql")
//1创建一个mysql连接(Connection)对象
//2配置数据库的连接
var connection=mysql.createConnection({
    host:"127.0.0.1",
    user:"root",
    port:3306,
    password:'root',
    database:"cgb"
})
//3开辟连接
connection.connect();
//4执行crud
var loc="二区"
connection.query(`select * from dept where loc='${loc}'`,function(error,result){
    //如果查询出错则直接抛出
    if(error) throw error;
    //查询成功,打印结果集
    console.log(result);
})
//5关闭连接
connection.end()

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐