日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Node使用MySQL

發布時間:2024/7/5 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Node使用MySQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、認識mysql2

如何可以在Node的代碼中執行SQL語句來,這里我們可以借助于兩個庫:

  • mysql:最早的Node連接MySQL的數據庫驅動;
  • mysql2:在mysql的基礎之上,進行了很多的優化、改進;目前相對來說,我更偏向于使用mysql2,mysql2兼容mysql的API,并且提供了一些附加功能
    • 更快/更好的性能;
    • Prepared Statement(預編譯語句):

    提高性能:將創建的語句模塊發送給MySQL,然后MySQL編譯(解析、優化、轉換)語句模塊,并且存儲它但是不執行,之后我們在真正執行時會給?提供實際的參數才會執行;就算多次執行,也只會編譯一次,所以性能是更高的;

    防止SQL注入:之后傳入的值不會像模塊引擎那樣就編譯,那么一些SQL注入的內容不會被執行;or 1 = 1不會被執行;

    • 支持Promise,所以我們可以使用async和await語法

    所以后續的學習中會選擇mysql2在node中操作數據。

    二、使用mysql2

  • 安裝mysql2
  • mysql2的使用過程如下:
    第一步:創建連接(通過createConnection),并且獲取連接對象;
  • 第二步:執行SQL語句即可(通過query);

    const mysql = require('mysql2')// 1. 創建數據庫連接 const connection = mysql.createConnection({host: 'localhost',port: 3306,database: 'coderhub',user: 'root',password: 'root' })// 2. 執行sql語句 const statement = `select * from products where price > 9000` connection.query(statement, (err, results, fields) => {// console.log(err)console.log(results)// console.log(fields)// connection.end()connection.destroy() })

    三、Prepared Statement

    Prepared Statement(預編譯語句):

  • 提高性能:將創建的語句模塊發送給MySQL,然后MySQL編譯(解析、優化、轉換)語句模塊,并且存儲
    它但是不執行,之后我們在真正執行時會給?提供實際的參數才會執行;就算多次執行,也只會編譯一次,所
    以性能是更高的;
  • 防止SQL注入:之后傳入的值不會像模塊引擎那樣就編譯,那么一些SQL注入的內容不會被執行;or 1 = 1不
    會被執行;

  • 強調:如果再次執行該語句,它將會從LRU(Least Recently Used) Cache中獲取獲取,省略了編譯statement的時間來提高性能。

    四、Connection Pools

    前面我們是創建了一個連接(connection),但是如果我們有多個請求的話,該連接很有可能正在被占用,那么我們是否需要每次一個請求都去創建一個新的連接呢?

  • 事實上,mysql2給我們提供了連接池(connection pools);
  • 連接池可以在需要的時候自動創建連接,并且創建的連接不會被銷毀,會放到連接池中,后續可以繼續使用;
  • 我們可以在創建連接池的時候設置LIMIT,也就是最大創建個數;

  • 五、Promise方式

    目前在JavaScript開發中我們更習慣Promise和await、async的方式,mysql2同樣是支持的:

    六、認識ORM

    對象關系映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序設計的方案:

    • 從效果上來講,它提供了一個可在編程語言中,使用 虛擬對象數據庫 的效果;
    • 比如在Java開發中經常使用的ORM包括:Hibernate、MyBatis;

    Node當中的ORM我們通常使用的是 sequelize;

    • Sequelize是用于Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server的基于Node.js 的 ORM;
    • 它支持非常多的功能;

    如果我們希望將Sequelize和MySQL一起使用,那么我們需要先安裝兩個東西:

    • mysql2:sequelize在操作mysql時使用的是mysql2;
    • sequelize:使用它來讓對象映射到表中;

    npm install sequelize mysql2

    七、Sequelize的使用

    Sequelize的連接數據庫:

  • 第一步:創建一個Sequelize的對象,并且指定數據庫、用戶名、密碼、數據庫類型、主機地址等;
  • 第二步:測試連接是否成功;
  • 八、Sequelize映射關系表




    const { Sequelize, DataTypes, Model, Op } = require('sequelize') const sequelize = new Sequelize('coderhub', 'root', 'root', {host: 'localhost',dialect: 'mysql' }) class Product extends Model {} Product.init({id: {type: DataTypes.INTEGER,primaryKey: true,autoIncrement: true},title: {type: DataTypes.STRING,allowNotNull: false},price: DataTypes.DOUBLE,score: DataTypes.DOUBLE }, {tableName: 'products',createdAt: false,updatedAt: false,sequelize }) async function queryProducts() {// 1. 查詢數據庫中products表中的所以內容/*const result = await Product.findAll({where: {price: {[Op.gte]: 9000}}})console.log(result)*/// 2. 插入數據/*const result = await Product.create({title: '三星zep',price: 99999,score: 10})console.log(result)*/const result = await Product.update({price: 3333}, {where: {id: 1}})console.log(result) } queryProducts()

    九、Sequelize 一對多關系


    十、Sequelize多對多關系



    總結

    以上是生活随笔為你收集整理的Node使用MySQL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。