Node.js操做數據庫(MySQL/Mongoose)隨筆

關係型數據庫和非關係型數據庫

  • 關係型數據庫(如MySQL)
    • 全部的關係型數據庫都是經過sql語言操做
    • 全部關係型數據庫在操做以前須要設計表結構
    • 表結構支持約束:惟一的、主鍵、默認值、非空
  • 非關係型數據庫(如MongDB)
    • 非關係型數據庫相似key-value的鍵值對
    • MongoDB最像關係型數據庫的非關係型數據庫
      • 數據庫=》數據庫
      • 數據表=》集合(數組)
      • 表記錄=》文檔(對象)

MySQL

解壓到純英文路徑node

MySQL 安裝目錄
C:/Develop/mysql
數據文件所在目錄
/Develop/mysql/data
複製代碼

解壓目錄添加 my.ini(配置文件)如:mysql

[mysqld]
#設置默認字符集,只會影響新建數據庫的默認
character-set-server=utf8
複製代碼

以管理員身份運行 CMD 執行如下命令,安裝一個 MySQL 服務sql

//定位到安裝目錄下的 bin 文件夾
cd <MySQL安裝目錄>/bin
//初始化數據所需文件以及獲取一個臨時的訪問密碼
mysqld --initialize --user=mysql --console
//將 MySQL 安裝爲服務 能夠指定服務名稱
mysqld --install MySQL
複製代碼

登入 MySQL 服務器,重置密碼mongodb

//先經過用戶名密碼進入 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: # 這時會要求你輸入密碼
複製代碼

-數據庫管理工具npm

數據庫管理工具本質上就是一個使用數據庫服務器軟件(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來操做數據庫bash

  • 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`;
複製代碼

修改mongoose

-- 更新數據
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)
  }
})
複製代碼
相關文章
相關標籤/搜索