数据库
概述:
数据库顾名思义数据的仓库,他可以比喻成一个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的安装
- 下载 phpStudy(小皮面板) - 让天下没有难配的服务器环境!
- 安装 无脑化
- 打开
启动服务
测试(找到对应的安装路径下的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)
})