数据库的相关内容

数据库

概述:

数据库顾名思义数据的仓库,他可以比喻成一个excel表格,里面可以存储对应的数据。数据有对应的行和列,列表表示对应的字段。行表示对应的数据行(单独的一行数据 一个对象)。

数据库划分为两类:关系型数据库及非关系型数据库。

  • 关系型数据库(数据库持久化存储(表与表之间存在对应的关系)SQL)

        mysql(小型数据库(中小型公司的使用))

        oracle(大型数据库(安全性较高 内容较多的使用))

        sql server(配合.net一起使用(老项目))

        db2(erp项目使用 二次开发)

        spllit(物联网 安卓)

        ...

  • 非关系型数据库(NO-SQL(内存数据库key-value数据库))

        redis

        mongodb

        ...

关系型数据库遵从sql1999协议,内部采用sql来进行相关的操作。非关系型数据库采用指令化操作。

MySQL

mysql是Oracle公司出的一款数据库,他具备两个特点 免费、轻量级。他是一个关系型数据库。具备DDL,DML,DCL、DQL等数据库操作语句。

mysql的安装

 

 启动服务

 

 测试(找到对应的安装路径下的extension下的mysql下的bin目录 进入到cmd)

 默认的用户名及密码都为root

mysql -u root -p root

 DDL语句

数据库的构成

  • 库(包含多个表)
  • 表(包含多个字段及多行数据)
  • 字段(列名)
  • 数据行(一行数据)

创建数据库

create database 数据库名;

 

查看数据库

select database(); #查看当前数据库

 

 show databases;

 

切换数据库

 use 数据库名;

删除数据库

 drop database 数据库名;

数据表的操作(进入数据库)

  • 创建表

create table 表名(字段名 类型 约束,字段名 类型 约束...)

 

  • 查看表

show tables;

  • 修改表

ALTER TABLE 表名 RENAME 新表名;
ALTER TABLE 表名 add 新的列;
ALTER TABLE 表名 change 旧的列 新的列;
ALTER TABLE 表名 modifi 旧的列 新的列;

 

  • 删除表 

drop table 表名;

 

DML语句(数据库模型语句)

可视化工具

 新建连接

 

 操作

 

#inster into 表名(列) values(数据) #默认指定所有的列
INSERT INTO t_user VALUES(null,'differ','000000')
INSERT INTO t_user(id,username) VALUES(108,'hello')

  • 删(不建议使用删除 而是使用修改来替代删除)

#delete from 表名 where 条件
delete from t_user where id = 108

#update 表名 set 列=值 where 条件
update t_user set password = 'abc' where id = 4

  • 查(效率问题 (使用索引进行优化))

        简易查询

#不建议使用* *表示所有的列
# select 需要查询的列 from 表名
select * from t_user #查询所有 

        条件查询 where关键词

#select 需要查询的字段 from 表名 where 条件
select password from t_user where username='tom'

        模糊查询

--查询名字中有o的id %表示多个内容(可以是没有)
select id from t_user where username like '%o%'
--查询对应的用户名的第二个英文单词为a的 _占位
select * from t_user where username like '_a%'

        连接查询

--查询jack的订单
select name from t_order where uid = (select id from t_user where username 'jack')
--and 和 or 或
select a.*,b.name from t_user as a,t_order as b where a.id = b.uid and
a.username ='jack'
--left join on为判断
select * from t_user a LEFT JOIN t_order b ON a.id = b.uid where a.username='jack'

排序

--查询订单 价格按照从低到高排序 DESC表示逆序 asc正序
select * from t_order ORDER BY money asc

分页查询

--  limit 第一个参数为开始下标 第二个参数为个数
select * from t_user limit 2,2

求和计算个数

--  sum求和
select sum(money) from t_order
--count计算个数
select count(*) from t_order

mysql模块

用于连接数据及操作数据库,这个模块不是内置模块需要安装

安装

npm i mysql -s

入门

  • 导入mysql模块

const mysql = require('mysql')

  • 新建连接对象

let connection = mysql.createConnection({

        host:'localhost',

        port:3306,

        user:"root",

        password:'root',

        database:"db_student"

})

  • 使用连接对象建立连接

connection.connect((err)=>{

        if(err) throw new Error(err)

        console.log('连接成功')

})

  • 打开查询进行sql语句的执行

connection.query("select * from t_hhhh",(err,result)=>{

        if(err) throw new Error(err)

        console.log(result)

})

mysql相关方法讲解

  • createConnection 创建一个连接对象(传入对应的连接相关配置 连接地址 端口号 用户名 密码 数据库名)
  • connect 连接的方法 使用连接对象进行连接
  • destroy 关闭连接
  • query 使用连接对象进行查询(传入对应的sql语句自动执行返回结果 支持占位符 返回任意类型数据)
// 使用query执行对应的增删改操作 支持占位符 ? (防止sql注入)
// query的第一个参数为执行sql语句 第二个参数传入占位符的数据 回调函数
let username = "张三"
let password = '12445'
// 增删改 返回的都是OkPacket对象 里面serverStatus为2表示成功
//插入数据
connection.query('insert into t_user values(null,?,?)',[username,password],
(err,result)=>{
console.log(result)
})
//根据id删除
connection.query('delete from t_user where id=?',109,(err,result)=>{
console.log(result)
})
//根据id修改
connection.query('update t_user set username=? where id=?',['王二麻子',4],
(err,result)=>{
console.log(result)
})
// 根据id查询 (查询返回的是数组)
connection.query("select * from t_user where id = ?",4,(err,result)=>{
if(err) throw new Error(err)
console.log(result)
//销毁连接
connection.destroy()
})
// 查询个数
connection.query("select count(*) as count from t_user",(err,result)=>{
if(err) throw new Error(err)
console.log(result)
//销毁连接
connection.destroy()
})

通过连接进行查询操作 最大问题存在于连接的建立和连接的关闭 (大量的耗费资源 需要连接池来
帮助我们创建和关闭连接)

使用连接池进行连接

  • 创建连接池
  • 通过连接池返回连接进行操作
//导入
const mysql = require('mysql')
const { rootCertificates } = require('tls')
//使用mysql来创建连接池
let pool = mysql.createPool({
host:'localhost',
port:3307,
user:"root",
password:"root",
database:"db_teach"
})
//通过连接池获取连接进行操作
pool.getConnection((err,connection)=>{
//使用获取的连接对象进行操作
connection.query('select * from t_user',(err,result)=>{
console.log(result)
connection.destroy()
})
})

简单封装工具类

dbutil 封装的工具类

//封装的一个操作对应的sql执行的帮助类
//导入
const mysql = require('mysql')
//导入
const config = require('./readConfig')
//使用mysql来创建连接池
let pool = mysql.createPool(config)
// 封装一个执行sql语句的方法
function query(sql,param=null) {
return new Promise((resolve,reject) => {
//通过连接池获取连接进行操作
pool.getConnection((err, connection) => {
if(err) reject(err)
//使用获取的连接对象进行操作
connection.query(sql, param ,(err, result) => {
if(err) reject(err)
resolve(result)
connection.destroy()
})
})
})
}
module.exports = {
query
}

readconfig 读取配置的js

//导入fs模块
const fs = require('fs')
const {join} = require('path')
//通过fs读取config.json的内容
const config = JSON.parse(fs.readFileSync(join(__dirname,"../config.json")))
module.exports = config

config.json 配置文件

{
"host": "localhost",
"port": 3307,
"user":"root",
"password": "root",
"database": "db_teach"
}

mongodb

概述:

mongodb是一个key-value数据,里面存储数据格式为BSON格式(类似于json 存储的内容大于
json),他是一个内存数据库,数据存储在内存上。

MongoDB: The Developer Data Platform | MongoDB

安装 (无脑化)

Download MongoDB Community Server | MongoDB

启动

下载的mongo在本机以服务的形式体现,所以在访问的时候是通过客户端来连接到服务端进行操作的。

本机的mongodb客户端界面

 配置环境变量

将mongodb安装路径下的server下的bin目录添加到环境变量的path中

测试 (wind+r cmd进入)

mongo

 mongodb的相关指令

查看所有的数据库 (空数据库不会展示)

show dbs

 切换数据库 (如果没有会被创建)

use 数据库名

 查看数据库的所有表

show tables

 查看数据表的内容

db.表名.find()

 mongodb的关键词

  • database 数据库
  • collection 数据表
  • document 内容

mongodb模块

安装

npm i mongodb -S

入门

//导入
const MongoClient = require('mongodb').MongoClient
//建立连接 客户端去连接服务端
//新建客户端
let client = new MongoClient('mongodb://127.0.0.1:27017/')
//使用客户端来建立连接
client.connect().then(connection=>{
// console.log(connection)
console.log('连接成功')
//使用连接对象进行相关操作
//打开一个数据库 如果没有就会新建
let db = connection.db('user') //没有数据库会自动新建
//创建数据表 获取数据表 如果没有就会创建
let tb = db.collection('t_user')
//数据表进行数据操作
// tb.insertOne 插入一条数据
// tb.insertOne({ //_id 主键 自动生成
// username:"jack",
// password:'123456'
// }).then(res=>{
// console.log(res);
// })
// // tb.insertMany 插入多条数据
// tb.insertMany([
// { //_id 主键 自动生成
// username:"jack",
// password:'123456'
// },
// { //_id 主键 自动生成
// username:"tom",
// password:'123456'
// },
// { //_id 主键 自动生成
// username:"rose",
// password:'123456'
// }
// ]).then(res=>{
// console.log(res);
// })
//查询所有
// tb.find().toArray().then(res=>{
// console.log(res)
// })
//查询用户名为jack的
// tb.find({
// username:'jack'
// }).toArray().then(res=>{
// console.log(res)
// })
//查询一个 自动获取第一个
// tb.findOne().then(res=>{
// console.log(res);
// })
// tb.findOne({
// username:'tom'
// }).then(res=>{
// console.log(res);
// })
// tb.deleteOne
//acknowledged 判断是否执行成功
// tb.deleteMany({
// username:"jack"
// }).then(res=>{
// console.log(res)
// })
//修改
// tb.updateOne
// tb.updateMany({
// username:"tom"
// },{$set:{username:"jack"}}).then(res=>{
// console.log(res)
// })
})

操作相关的方法

  • 查 find 查找所有 findOne 查找第一个
  • 改 updateOne 更改第一个 updateMany 更改所有
  • 删 deleteOne 删除第一个 deleteMany 删除所有
  • 增 insertOne 添加一个 insertMany 添加多个

mongoose模块 (对mongodb模块进行了封装)

安装mongos模块

npm i mongoose -S

入门

//导入mongoose模块
const mongoose = require('mongoose')
//连接 指定对应的数据库
mongoose.connect('mongodb://127.0.0.1:27017/user')
.
then(() => console.log('Connected!'));
//编辑对应的模板 表数据的构成
let schema = new mongoose.Schema({
username:String,
password:String
})
//产生模型来操作对应的方法
//默认加入到对应的库里面 第一个参数默认指定的模型名(没有什么意思只是用于标识)
//而第三个参数指定的也是表名 指向正确的表名
const model = mongoose.model('t_user', schema,"t_user");
//利用模型来进行操作
model.insertMany([
{
username:"tom",
password:"123123"
},{
username:"tom1",
password:"123123"
},{
username:"tom2",
password:"123123"
}
]).then(res=>{
console.log(res)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值