Node.js-プロジェクトでのMySQLの操作

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して18日目です。クリックしてイベントの詳細をご覧ください

プロジェクトでデータベースを操作する手順

  • MySQLデータベースを操作するためのサードパーティモジュール(mysql)をインストールします
  • mysqlモジュールを介してMySQLデータベースに接続します
  • mysqlモジュールを介してSQLステートメントを実行します

mysqlモジュールをインストールして構成します

  • mysqlモジュールをインストールします

    mysqlモジュールは、npmでホストされるサードパーティモジュールです。node.jsプロジェクトのMySQLデータベースに接続して操作する機能を提供します

    npm install mysql
    复制代码
  • mysqlモジュールを構成します

    mysqlモジュールを使用してMySQLデータベースを操作する前に、mysqlモジュールを必要な手順で構成する必要があります。

    • 1.mysqlモジュールをインポートします

    • 2.MySQLデータベースへの接続を確立します

    // 导入 mysql 模块
    const mysql = require('mysql')
    // 建立 MySQL 数据库的连接关系
    const db = mysql.createPool({
    
        // 数据库 IP 地址
        host:'127.0.0.1',
        // 登录数据库的账号
        user:'root',
        // 登录数据库的密码
        password:'admin123',
        // 指定要操作哪个数据库
        database:'my_db_01'
    })
    复制代码
  • mysqlモジュールが機能するかどうかを確認します

    db.query()関数を呼び出し、実行するSQLステートメントを指定し、コールバック関数を介して実行結果を取得します

    // 测试 mysql 模块能否正常工作
    db.query('select 1', (err, results) => {
    
        if (err){
            // mysql 模块工作期间报错了
            return console.log(err.message)
        }
    
        // 能够成功执行 SQL 语句
        console.log(results)
    })
    复制代码

    ログ:

    Snip20220418_34.png


mysqlモジュールを使用してMySQLデータベースを操作します

現在のデータベーステーブルのデータ

Snip20220418_35.png

クエリデータ

  • selectクエリステートメントが実行されると、実行結果は配列になります

  • ユーザーテーブルのすべてのデータをクエリする

    const sqlStr = 'select * from users'
    
    db.query(sqlStr, (err, results) => {
        if(err){
            return console.log(err)
        }
        console.log(results)
    })
    复制代码

    ログ:

    [
        RowDataPacket {
            id: 1,
            username: '孙悟空',
            password: '111111',
            status: '0'
        },
    
        RowDataPacket {
            id: 2,
            username: '猪八戒',
            password: '222222',
            status: '0'
        }
    ]
    复制代码

データを挿入

  • insert into挿入ステートメントが実行されると、実行の結果はオブジェクトになります。このaffectedRows属性、データが正常に挿入されたかどうかを判断できます

  • ユーザーテーブルにデータを挿入します。ユーザー名はTangSeng、パスワードは333333です。

    // 新建一个 user 对象
    const user = {username:'唐僧', password:'333333'}
    
    // 要执行的 SQL 语句,其中英文的 ? 表示占位符
    const sqlStr = 'insert into users (username, password) values(?,?)'
    
    // 使用数组的形式,依次为 ?占位符指定具体的值
    db.query(sqlStr, [user.username, user.password], (err, results) => {
    
        if(err){
            return console.log(err.message)
        }
    
        if (results.affectedRows === 1) {
            console.log('插入数据成功')
        }
    })
    复制代码

    ログ:

    Snip20220418_36.png

  • データを挿入する便利な方法

    テーブルにデータを追加するときに、データオブジェクトの各属性がデータテーブルのフィールドに1対1で対応している場合は、次の方法でデータをすばやく挿入できset ?ます。

    const sqlStr = 'insert into users set ?'
    复制代码
  • ユーザーテーブルにデータを挿入します。ユーザー名はShaMonk、パスワードは444444です。

    // 新建一个 user 对象
    const user = {username:'沙僧', password:'444444'}
    
    // 要执行的 SQL 语句,其中英文的 ? 表示占位符
    const sqlStr = 'insert into users set ?'
    
    // 执行 SQL 语句
    db.query(sqlStr, user, (err, results) => {
    
        if(err){
            return console.log(err.message)
        }
    
        if (results.affectedRows === 1) {
            console.log('插入数据成功')
        }
    })
    复制代码

データを更新

  • update挿入ステートメントが実行されると、実行の結果はオブジェクトになります。このaffectedRows属性、更新データが成功したかどうかを判別できます

  • データを更新します。元のデータベースIDが1のオブジェクトで、ユーザー名がMonkey Kingに更新され、パスワードがaaaaaaに更新されます。

    // 定义要更新的 user 对象
    const user = {id:1, username:'齐天大圣', password:'aaaaaa'}
    
    // 要执行的 SQL 语句,其中英文的 ? 表示占位符
    const sqlStr = 'update users set username=?, password=? where id=?'
    
    // 执行 SQL 语句
    db.query(sqlStr, [user.username, user.password, user.id], (err, results) => {
    
        if(err){
            return console.log(err.message)
        }
        if (results.affectedRows === 1) {
            console.log('更新数据成功')
        }
    })
    复制代码

    ログ:

    Snip20220418_37.png

  • データを更新する便利な方法

    テーブル内のデータを更新するときに、データオブジェクトの各属性がデータテーブルのフィールドに1対1で対応している場合は、次の方法でデータset ?を。

    const sqlStr = 'update users set ?'
    复制代码
  • データを更新します。元のデータベースIDが2のオブジェクトで、ユーザー名がMarshal Tianpengに更新され、パスワードがbbbbbbに更新されます。

    // 定义要更新的 user 对象
    const user = {id:2, username:'天蓬元帅', password:'bbbbbb'}
    
    // 要执行的 SQL 语句,其中英文的 ? 表示占位符
    const sqlStr = 'update users set ? where id=?'
    
    // 执行 SQL 语句
    db.query(sqlStr, [user, user.id], (err, results) => {
    
        if(err){
            return console.log(err.message)
        }
        if (results.affectedRows === 1) {
            console.log('更新数据成功')
        }
    })
    复制代码

    ログ:

    Snip20220418_38.png

データを削除する

  • データを削除する場合は、idそのよう

  • delete挿入ステートメントが実行されると、実行の結果はオブジェクトになります。このaffectedRows属性、更新データが成功したかどうかを判別できます

  • ID3のユーザーオブジェクトを削除します

    // 要执行的 SQL 语句,其中英文的 ? 表示占位符
    const sqlStr = 'delete from users where id=?'
    
    // 执行 SQL 语句
    db.query(sqlStr, 3, (err, results) => {
    
        if(err){
            return console.log(err.message)
        }
        if (results.affectedRows === 1) {
            console.log('删除数据成功')
        }
    
    })
    复制代码

    ログ:

    Snip20220418_39.png

削除のマーク

  • deleteステートメントを使用すると、テーブルから実際のデータが削除されます。保険のために、削除のアクションをシミュレートするためにマークされた削除の形式を使用することをお勧めします

  • いわゆるマーク付き削除とは、テーブルのstatusステータス、現在のデータが削除されているかどうかをマークすることです。ユーザーが削除アクションを実行すると、データを削除するdeleteステートメントが実行さupdateれ、このデータに対応するstatusフィールド削除済みとしてマークされます。

  • updateステートメントの代わりdeleteにステートメントを使用します。これは、データの状態を更新するだけで、実際にはデータを削除しません。

    // 要执行的 SQL 语句,其中英文的 ? 表示占位符
    const sqlStr = 'update users set status=? where id=?'
    
    // 执行 SQL 语句
    db.query(sqlStr, [1, 4], (err, results) => {
    
        if(err){
            return console.log(err.message)
        }
    
        if (results.affectedRows === 1) {
            console.log('标记删除数据成功')
        }
    })
    复制代码

    ログ:

    Snip20220418_40.png

おすすめ

転載: juejin.im/post/7087865169648287758