关系型数据库和非关系型数据库
- 关系型数据库(如MySQL)
- 所有的关系型数据库都是通过sql语言操作
- 所有关系型数据库在操作之前需要设计表结构
- 表结构支持约束:唯一的、主键、默认值、非空
- 非关系型数据库(如MongDB)
- 非关系型数据库类似key-value的键值对
- MongoDB最像关系型数据库的非关系型数据库
- 数据库=》数据库
- 数据表=》集合(数组)
- 表记录=》文档(对象)
MySQL
- 安装mysql
解压到纯英文路径
MySQL 安装目录
C:/Develop/mysql
数据文件所在目录
/Develop/mysql/data
复制代码
解压目录添加 my.ini(配置文件)如:
[mysqld]
#设置默认字符集,只会影响新建数据库的默认
character-set-server=utf8
复制代码
以管理员身份运行 CMD 执行以下命令,安装一个 MySQL 服务
//定位到安装目录下的 bin 文件夹
cd <MySQL安装目录>/bin
//初始化数据所需文件以及获取一个临时的访问密码
mysqld --initialize --user=mysql --console
//将 MySQL 安装为服务 可以指定服务名称
mysqld --install MySQL
复制代码
登入 MySQL 服务器,重置密码
//先通过用户名密码进入 MySQL 操作环境
mysql -u root -p
Enter password: # 输入临时密码
//设置数据库访问密码,一定要加分号
mysql> set password for root@localhost = password('123');
复制代码
- 启动和关闭数据库
在本地服务启动或关闭mysql
- 进入数据库(mysql.exe命令行客户端工具)
cd <解压目录>/bin
mysql -u root -p
Enter password: # 这时会要求你输入密码
复制代码
-数据库管理工具
数据库管理工具本质上就是一个使用数据库服务器软件(Server)提供的服务的数据库客户端(Client)如命令行工具,可视化工具
- 基本命令操作(简单操作数据库)
mysql> show databases; -- 显示全部数据库
mysql> create database <db-name>; -- 创建一个指定名称的数据库
mysql> use <db-name>; -- 使用一个数据库,相当于进入指定的数据库
mysql> show tables; -- 显示当前数据库中有哪些表
mysql> create table <table-name> (id int, name varchar(20), age int); -- 创建一个指定名称的数据表,并添加 3 个列
mysql> desc <table-name>; -- 查看指定表结构
mysql> source ./path/to/sql-file.sql -- 执行本地 SQL 文件中的 SQL 语句
mysql> drop table <table-name>; -- 删除一个指定名称的数据表
mysql> drop database <db-name>; -- 删除一个指定名称的数据库
mysql> exit|quit; -- 退出数据库终端
复制代码
- 可视化工具Navicat Premium(复杂操作数据库)
在Node.js中操作Mysql数据库
使用第三方包mysql来操作数据库
- mysql的基本概念
- 数据库(数据库服务软件/数据的仓库)
- 表
- 字段 —— 指的就是列
- 字段类型 —— 指的就是列能够存储的数据种类
- int
- char(length)
- varchar(length)
- date
- decimal
- 安装
npm install mysql
- hello word
var mysql = require('mysql');
// 1. 创建连接
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '199547com',
database: 'demo'
// 2. 连接数据库
connection.connect();
// 3. 执行数据操作
connection.query('SELECT * FROM `songs`', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
});
// 4. 关闭连接
connection.end();
复制代码
- crud 增加
//插入全部字段
insert into users values (null, '王五', 0, '2020-12-12', '12312');
//指定字段
insert into users (name, gender, avatar) values ('王五', 0, '12312');
复制代码
查询
// 查询所有数据
select * from users;
//查询单个(select 字段[, 字段2] from 表名)
select id, name, birthday from users;
select `id`, `title`, `name` from `users`;
复制代码
修改
-- 更新数据
update users set name = '麻子', gender = 0
复制代码
删除
delete from users where id = 6
delete from users where id = 6 and gender = 0
delete from users where id = 6 or gender = 0
delete from users where id > 6
delete from users where id in (4, 5)
复制代码
MongoDB
- 安装 mongodb,在cmd输入
mongod --version
验证是否成功 - 启动和关闭数据库(mongod.exe 数据库服务程序)
//启动
//mongodb默认执行mongod命令,所属盘符根目录下的/data/db作为自己的数据储存目录。
//第一次执行该命令时,先自己手动新建/data/db
mongod
//停止
在开启服务的控制台,直接ctrl+c停止或关闭控制台
复制代码
- 进入和退出数据库(mongo.exe命令行客户端工具)
//进入
mongo
//退出
exit
复制代码
- 基本命令操作
show dbs //查看显示所有的数据库
db //查看当前操作的数据库
show collections //查看当前操作数据库的集合
use 数据库名称 //切换到指定的数据库,如果没有会新建
db.文档名称.insertOne({"name":"jack"}) //插入数据
db.文档名称.find() //查看该文档对象的所有数据
复制代码
在Node.js中操作MongoDB数据库
使用第三方包mongoose(基于node.js官方包mongodb再一次封装)来操作mongodb数据库
- moogodb的基本概念
- 可以有多个数据库
- 一个数据库中可以有多个集合 collections(表)
- 一个集合 collections 中 有多个文档 document
{
// taobao、jidao、qq这些都是数据库名称,可以 db 查看当前操作数据库
// users、products 这些是集合 collections 创建的时候数据库会自动加 s 在后面
// 集合 collections 里面的每一条数据都是文档 document,结构都被 Schema 所规定。
qq: {
user: [
{ name: "张三" age: 18},
{ name: "张三" age: 18},
{ name: "张三" age: 18},
{ name: "张三" age: 18},
{ name: "张三" age: 18},
...
],
product: [
],
...
},
taobao: {
},
jidao: {
},
baidu: {
},
...
}
复制代码
- 安装
npm install mongoose
- hello word
var mongoose = require('mongoose')
mongoose.connect('mongodHb://localhost:27017/test', { useNewUrlParser: true })
var Cat = mongoose.model('Cat', { name: String })
var kitty = new Cat({ name: 'Zildjian' })
kitty.save().then(() => console.log('meow'))
复制代码
- crud
在 Mongoose 中,所有数据都由一个 Schema 开始创建。每一个 schema 都映射到一个 Mongodb 的集合(collection),并定义了该集合(collection)中的文档(document)的形式。
var mongoose = require('mongoose') //引入mongoose模块
mongoose.connect('mongodb://localhost/itcast')//连接 mongoDB 的数据库,如果没有就自动新建
var Schema = mongoose.Schema //引用 mongoose 的结构框功能
var userSchema = new Schema({ // 设计文档结构(表结构)
username: {
type: String,
required: true
},
password: {
type: String,
required: true
},
email: {
type: String
}
})
//建立了一个集合 collections 名为Users
//集合里面的每一条 数据/文档/docuemnt 都有着上面新建 Schema 的规则来存储
// 将文档结构发布为模型
var User = mongoose.model('User', userSchema)
// 直接导出模型构造函数
module.exports = mongoose.model('User', userSchema)
复制代码
增加功能
var admin = new User({
username: 'zs',
password: '123',
email: 'zhanglichun@qq.com'
})
admin.save(function (err, ret) {
if (err) {
console.log('保存失败')
} else {
console.log('保存成功')
}
})
复制代码
查询功能
//查询所有数据
User.find(function (err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log('查询成功')
console.log(ret)
}
})
//根据条件查询数据
User.find({
_id: '5ca3894ee78a732a245e3bb8',
username: 'zs'
}, function (err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
//根据条件查询数据的第一个
User.findOne({
username: 'zs'
}, function (err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
//根据id值查询数据
User.findById('5ca3894ee78a732a245e3bb8', function (err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
复制代码
更新功能
User.findByIdAndUpdate('5ca3894ee78a732a245e3bb8', {
username: 'll',
password: '8888'
}, function (err, ret) {
if (err) {
console.log('更新失败')
} else {
console.log('更新成功')
console.log(ret)
}
})
复制代码
删除功能
User.findByIdAndDelete('5ca3894ee78a732a245e3bb8', function (err, ret) {
if (err) {
console.log('删除失败')
} else {
console.log('删除成功')
console.log(ret)
}
})
复制代码