关系型数据库和非关系型数据库

  • 关系型数据库(如MySQL)
  • 所有的关系型数据库都是通过sql语言操作
  • 所有关系型数据库在操作之前需要设计表结构
  • 表结构支持约束:唯一的、主键、默认值、非空
  • 非关系型数据库(如MongDB)
  • 非关系型数据库类似key-value的键值对
  • MongoDB最像关系型数据库的非关系型数据库
  • 数据库=》数据库
  • 数据表=》集合(数组)
  • 表记录=》文档(对象)

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)
  }
})
复制代码