nodejs中的Mysql
Mysql介绍
- web server 最流行的关系型数据库
- 下载地址
- 安装 navicat premium
- mysql -u root -p密码
- show databases; 显示所有数据库
数据库操作(增删改查)
use myTest;
show tables;
-- 插入
insert into users(usernames,`password`,realname) values ('lisi','123','李四');
-- 查询
select * from users;
select id username from users;
-- 查询不等于
select * from users where username <> 'zhangsan'
select * from users where username='zhangsan' and `password` = '123';
-- 模糊查询
select * from users where username like '%zhang%' or `password` = '123';
-- 排序正序
select * from users where username like '%zhang%' order by id;
-- 排序倒序
select * from users where username like '%zhang%' order by id desc;
-- 更新 将username为lisi的realname改为李四2
SET SQL_SAFE_UPDATES = 0;
updata users set realname='李四2' where username='lisi';
-- 删除 一般不用
delete from users where username='lisi';
通过Nodejs操作Mysql
- npm i mysql --save
const mysql = require('mysql')
// 创建链接对象
const con = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '密码',
port: '3306',
database: 'myblog'
})
// 开始连接
con.connect()
// 执行 sql 语句
const sql = `insert into blogs (title, content, createtime, author) values ('标题C', '内容C',1546871704408, 'zhangsan')`
con.query(sql, (err, result) => {
if (err) {
console.error(err)
return
}
console.log(result)
})
// 关闭连接
con.end()
nodejs中的Mongodb
- Mysql 是以表格形式存储数据
- Redis 以key-value 形式存储数据
- Mongodb以文档形式存储数据,格式像JSON
Mongodb使用
- 创建一个数据库(database)
- 创建集合(collection)
- 文档(document)的增删改查
mongodb连接nodejs
- npm i mongodb --save
使用mongodb操作
const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017'
const dbName = 'myblog'
MongoClient.connect(
url,
{
// 配置(取消警告提示)
useUnifiedTopology: true
},
(err, client) => {
if (err) {
console.error('mongodb connect error', err)
return
}
// 没有报错,说明连接成功
console.log('mongodb connect success')
// 切换到数据库(类似控制台 `use myblog`)
const db = client.db(dbName)
// 关闭连接
client.close()
}
)
使用mongodb增删改查
const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017'
const dbName = 'myblog'
MongoClient.connect(
url,
{
// 配置
useUnifiedTopology: true
},
(err, client) => {
if (err) {
console.error('mongodb connect error', err)
return
}
// 没有报错,说明连接成功
console.log('mongodb connect success')
// 切换到数据库(控制台 `use myblog`)
const db = client.db(dbName)
// 使用集合
const usersCollection = db.collection('users')
// 新增
usersCollection.insertOne({
username: 'shuangyue',
password: 'abc',
realname: '双越'
}, (err, result) => {
if (err) {
console.error('users insert error', err)
return
}
console.log(result)
// 关闭连接
client.close()
})
// 修改单个
usersCollection.updateOne(
{ username: 'zhangsan' }, // 查询条件
{ $set: { realname: '张三A' } }, // 修改的内容,注意有 $set
(err, result) => {
if (err) {
console.error('users update error', err)
return
}
console.log(result)
// 关闭连接
client.close()
}
)
// 删除一个
usersCollection.deleteOne(
{ a: 101 },
(err, result) => {
if (err) {
console.error('users delete error', err)
return
}
console.log(result)
// 关闭连接
client.close()
}
)
// 查询
usersCollection.find({
username: 'zhangsan',
password: '123'
}).toArray((err, result) => {
if (err) {
console.error('users find error', err)
return
}
console.log(result)
// 关闭连接
client.close()
})
}
)
上面的不常用比较底层,下面使用更高级的mongoose
mongodb 数据格式过于灵活
- 可以插入任何数据,不受限制
- 实际项目开发时,要有数据格式的规范
mongoose可提供规范
- Schema定义数据格式的规范
- 以Model规范Collection
- 规范数据操作的API
- npm i mongoose --save
// 连接数据库
const mongoose = require('mongoose')
const url = 'mongodb://localhost:27017'
const dbName = 'myblog'
mongoose.set('useFindAndModify', false) // 如果提示此处出错,则删掉
mongoose.connect(`${url}/${dbName}`, {
// 避免警告配置
useNewUrlParser: true,
useUnifiedTopology: true
})
const db = mongoose.connection
// 发生错误
db.on('error', err => {
console.error(err)
})
// 连接成功
db.once('open', () => {
console.log('mongoose connect success…')
})
module.exports = mongoose
// 对应 user 集合
const mongoose = require('../db')
// 用 Schema 定义数据规范
const UserSchema = mongoose.Schema({
username: {
type: String,
required: true, // 必需
unique: true // 唯一,不能重复
},
password: String,
realname: String
})
// Model 对应 collection
const User = mongoose.model('user', UserSchema)
module.exports = User
// 操作数据库1
const User = require('../models/User')
// 自执行的异步函数
!(async () => {
// 创建用户(增)
const zhangsan = await User.create({
username: 'zhangsan',
password: '123',
realname: '张三'
})
// 查询
const list = await User.find()
console.log(list)
// 模拟登录
const zhangsan = await User.find({
username: 'zhangsan',
password: '123'
})
console.log(zhangsan)
})()
// 操作数据库2
const Blog = require('../models/Blog')
!(async () => {
// 新建博客
const blog1 = await Blog.create({
title: '标题3',
content: '内容3',
author: 'shuangyue'
})
console.log(blog1)
// 获取列表
const list = await Blog.find({
// author: 'zhangsan'
title: /A/ // 正则表达式,模糊查询
}).sort({ _id: -1 })
console.log(list)
// 根据 id 获取单个博客
const blog3 = await Blog.findById('5f4cc1824e9b73583b69b404')
console.log(blog3)
// 修改博客
const res = await Blog.findOneAndUpdate(
{ _id: '5f4cc1824e9b73583b69b404' }, // 条件
{ content: '内容3内容3内容3' },
{
new: true // 返回修改之后的最新的内容,默认为 false
}
)
console.log(res)
// 删除
const res = await Blog.findOneAndDelete({
_id: '5f4cc1824e9b73583b69b404',
author: 'shuangyue' // 验证一下作者,增加安全性,防止误删
})
console.log(res)
})()