数据库概述
- 数据库就是数据的仓库,数据有对应对的行和列,列表是对应的字段,行表示对应的数据行。
- 数据库分为:关系型数据库和非关系数据库。
- 关系型数据库遵从 sql1999 协议,内部采用 sql 语句来进行相关操作
- 非关系型数据库采用指令化操作
关系型数据库 :采用SQL语句,可持久化存储
- mysql
- oracle :安全性高
- sql server :配合.net 使用
- db2 :ERP项目使用较多,多用二次开发
- sqlite
- ....
非关系型数据库: NO-SQL,以 key-value 存储
- redis
- mongdb
- ....
mysql
免费、轻量级,具备DDL、DML、DCL、DQL等数据库操作语句,数据库由库、表、字段、数据行组成。
- 库包含多个表
- 表包含多个字段及多行数据
- 字段:列名
- 数据行:一行数据
DDL
1、数据库的操作
创建数据库
create database 数据库名;
查看数据库
show datadases;
select database();
切换数据库
use 数据库名;
删除数据库
drop database 数据库名;
2、数据表的操作
- 必须先加入数据库
- 创建表
create table 表名(字段名 类型 约束,字段名 类型 约束,...)
- 查看表
show tables;
- 修改表
重命名:alter table 表名 rename 新表名;
添加:alter table 表名 add 新的列;
修改:alter table 表名 change 旧的列 新的列;
修改:alter table 表名 modifi 旧的列 新的列;
- 删除表
drop table 表名;
DML(数据库模型语句):主要对数据进行操作
可视化工具
-
增
insert into 表名(列) values 数据 // 默认指定所有的列
如:INSERT INTO t_shoptype(id,shopname,money) VALUES (12,'蛋挞','10')
-
删
delete from 表名 where 条件
如:DELETE FROM t_shoptype WHERE id=12
-
改
update 表名 set 列=值 where 条件
如:UPDATE t_shoptype SET shopname='香油条' WHERE id=5
-
查
简易查询
- select 需要查询的列 from 表名。如:SELECT id,shopname,money FROM t_shoptype
条件查询
- select 需要查询的字段 from 表名 where 条件。如:SELECT shopname FROM t_shoptype WHERE id=1
模糊查询
- 查询名字中有旺的id %表示多个内容(可以是没有)如:SELECT id FROM t_shoptype WHERE shopname LIKE '%旺%'
连接查询:
- SELECT username FROM t_user WHERE id = (SELECT id FROM t_shoptype WHERE shopname = '怡宝' ) 或 SELECT * FROM t_shoptype LEFT JOIN t_user ON t_shoptype.id = t_user.id 或 SELECT sum(money) FROM t_shoptype(查询总价)
分页查找:
- SELECT * FROM t_shoptype LIMIT 2,2(从第 2 个 id 以后开始,查找两个值)
-
排序
查询订单 价格按照从低到高排序 DESC表示逆序 、asc正序
如:SELECT * FROM t_shoptype ORDER BY money DESC
mysql相关方法
- createConnection :创建一个连接对象(传入对应的连接相关配置、连接地址、端口号、用户名、密码、数据库名)
- connect :连接的方法,使用连接对象连接
- destory :关闭连接
- query :如下为增删改查方法
const mysql = require('mysql')
let connection = mysql.createConnection({
host: 'localhost',
port: 3307,
user: 'root',
password: 'root',
database: 'db_shop',
timeout: 3000
})
//通过连接对象进行连接
connection.connect((err) => {
if (err) {
throw new Error(err)
}
console.log('连接成功');
})
//增,返回的是一个OkPacket对象,里面的serverStatus为2表示成功
let shopname = '绿箭口香糖'
let money = '25'
connection.query('insert into t_shoptype values(6,?,?)', [shopname, money], (err, result) => {
console.log(result);
// OkPacket {
// fieldCount: 0,
// affectedRows: 1,
// insertId: 6,
// serverStatus: 2,
// warningCount: 0,
// message: '',
// protocol41: true,
// changedRows: 0
// }
})
//删,返回的是一个OkPacket对象,里面的serverStatus为2表示成功
connection.query('delete from t_shoptype where id=?', 6, (err, result) => {
console.log(result);
})
// 查询 ,返回的是数组
connection.query("select * from t_shoptype where id=?", 5, (err, result) => {
if (err) {
throw new Error(err)
}
console.log(result);
})
//查询个数
connection.query('select count(*) as count from t_shoptype', (err, result) => {
if (err) {
throw new Error(err)
}
console.log(result); //[ RowDataPacket { count: 5 } ]
})
//修改,
connection.query('update t_shoptype set shopname=? where id=?', ['百威', 3], (err, result) => {
console.log(result);
})
//查询全部
connection.query('select * from t_shoptype', (err, result) => {
if (err) {
throw new Error(err)
}
console.log(result);
connection.destroy()
})
【注】
通过连接查询,必须连接建立和关闭连接,这会大量耗费资源,需要连接池来帮助我们创建和关闭连接
mysql连接池创建
let pool = mysql.createPool ( { } ) // 创建连接池
const mysql = require('mysql')
//使用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_person', (err, result) => {
console.log(result);
//返回对的是一个数组
// [
// RowDataPacket { id: 1, name: 'tom', age: 17, tel: '18711712223' },
// RowDataPacket { id: 2, name: 'jack', age: 88, tel: '13856245316' },
// RowDataPacket { id: 3, name: 'marry', age: 56, tel: '15624365563' },
// RowDataPacket { id: 4, name: 'json', age: 12, tel: '15768966659' }
// ]
connection.destroy()
})
})
mongodb
mongodb 是一个 key-value 数据,里面存储数据格式为 BSON 格式(类似于 json,存储的内容大于 json ),它是一个内存数据库,数据存储在内存上。
mongodb的相关指令
show dbs; :查看所有的数据库 (空数据库不会展示)
use 数据库名; :切换数据库 (如果没有会被创建)
show tables; :查看数据库的所有表
db.表名.find() :查看数据表的内容
mongodb的关键词
- database :数据库
- collection :数据表
- document :内容
mongodb的安装: npm i mongodb -S
mongoes模块
-
查: find 查找所有 、findOne 查找第一个
-
改 :updateOne 更改第一个、 updateMany 更改所有
-
删 :deleteOne 删除第一个 、deleteMany 删除所有
-
增 :insertOne 添加一个 、insertMany 添加多个
const { connection } = require("mongoose");
//导入
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_likes")
//对数据表进行数据操作
//tb.insertOne 表示插入一条数据,_id是主键会自动生成。
//tb.insertMany 插入多条数据
tb.insertOne({ //_id 主键 自动生成
name: "麻辣王子",
howMuch: '25',
count: '1'
}).then(res => {
console.log(res);
})
// 查询所有
tb.find().toArray().then(res => {
console.log(res)
})
//查询用户名为jack的
tb.find({
name: '麻辣王子'
}).toArray().then(res => {
console.log(res)
})
//查询一个 自动获取第一个
tb.findOne().then(res => {
console.log(res);
})
// tb.deleteOne acknowledged:判断是否执行成功
tb.deleteMany({
name: "麻辣王子"
}).then(res => {
console.log(res)
})
//修改
tb.updateOne
tb.updateMany({
name: "薯片"
}, { $set: { name: "牛肉干" } }).then(res => {
console.log(res)
})
})
【示例】
//导入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: "jack",
password: "123123"
}, {
username: "tilavine",
password: "123123"
}]).then(res => {
console.log(res)
})