MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

Node.jsでMySQLのレコードを更新する方法を徹底解説

この記事では、Node.jsを使ってMySQLのレコードを更新する方法について解説します。Node.jsのサーバーから動的にMySQLテーブルの値を更新する手順を、具体的なコード例とともに見ていきましょう。更新後にはSELECT文を実行することで、レコードが正しく更新されたかどうかを確認できます。

事前準備

作業を始める前に、以下のコマンドがすでに実行されていることを確認してください。

  • mkdir mysql-test
  • cd mysql-test
  • npm init -y
  • npm install mysql

これらの手順は、プロジェクトフォルダにNode.js用のmysqlパッケージ(依存関係)をインストールするためのものです。

Studentsテーブルのレコードを更新する手順

MySQLテーブルの既存レコードを更新するには、以下の手順に従います。

  1. まず、app.jsファイルを作成します。
  2. 次に、後述のコードスニペットをファイルにコピー&ペーストします。
  3. 最後に、以下のコマンドでコードを実行します。
>> node app.js

例1:名前を条件にレコードを更新する

// NPMでmysqlパッケージを読み込む
var mysql = require('mysql');

// MySQLへの接続を作成
var con = mysql.createConnection({
    host: "localhost",
    user: "yourusername",
    password: "yourpassword",
    database: "mydb"
});

con.connect(function(err) {
    if (err) throw err;
    // nameが「John」のレコードのaddressを「Bangalore」に更新
    var sql = "UPDATE student SET address = 'Bangalore' WHERE name = 'John';"
    con.query(sql, function (err, result) {
        if (err) throw err;
        console.log(result.affectedRows + " Record(s) updated.");
        console.log(result);
    });
});

実行結果

1 Record(s) updated.
OkPacket {
    fieldCount: 0,
    affectedRows: 1, // 更新された行数を返します
    insertId: 0,
    serverStatus: 34,
    warningCount: 0,
    message: '(Rows matched: 1 Changed: 1 Warnings: 0', // マッチした行数を返します
    protocol41: true,
    changedRows: 1 }

この例では、nameが「John」であるレコードを検索し、そのaddressフィールドを「Bangalore」に更新しています。affectedRowsプロパティには実際に更新された行数が格納されます。

例2:住所を条件に複数のレコードを更新する

// NPMでmysqlパッケージを読み込む
var mysql = require('mysql');

// MySQLへの接続を作成
var con = mysql.createConnection({
    host: "localhost",
    user: "yourusername",
    password: "yourpassword",
    database: "mydb"
});

con.connect(function(err) {
    if (err) throw err;
    // addressが「Delhi」のレコードのaddressを「Bangalore」に更新
    var sql = "UPDATE student SET address = 'Bangalore' WHERE address = 'Delhi';"
    con.query(sql, function (err, result) {
        if (err) throw err;
        console.log(result.affectedRows + " Record(s) updated.");
        console.log(result);
    });
});

実行結果

3 Record(s) updated.
OkPacket {
    fieldCount: 0,
    affectedRows: 3, // 更新された行数を返します
    insertId: 0,
    serverStatus: 34,
    warningCount: 0,
    message: '(Rows matched: 3 Changed: 3 Warnings: 0', // マッチした行数を返します
    protocol41: true,
    changedRows: 3 }

この例では、WHERE句でaddressが「Delhi」であるレコードを絞り込み、該当するすべてのレコードのaddressを「Bangalore」に一括更新しています。結果として3件のレコードが更新されました。

まとめ

Node.jsからMySQLのレコードを更新する際は、UPDATE文をSQLクエリとしてcon.query()メソッドに渡すだけで実現できます。実行結果として返されるOkPacketオブジェクトのaffectedRows(更新された行数)やchangedRows(変更があった行数)を確認することで、更新処理が正しく行われたかを検証できます。なお、本番環境ではSQLインジェクション対策としてプレースホルダ(?)を使ったパラメータ化クエリの利用を推奨します。

  1. Node.jsでMySQLのレコードを削除する方法を解説

    はじめにデータベースへのレコード挿入後、不要になったデータを削除する場面も必ず出てきます。MySQLでは、テーブル内のレコードを識別子(条件)に基づいて削除することが可能で、その際には「DELETE FROM」ステートメントを使用します。Node.jsからMySQLのレコードを削除する方法は、主に以下の2通りがあります。静的な削除 – あらかじめ決められた条件値を指定して削除する方法です。動的な削除 – 削除前にユーザーから入力を受け取り、その値に基づいて削除を実行する方法です。事前準備作業を始める前に、以下のコマンドがすでに実行済みであることを確認してください。mkdir mysql-tes

  2. Sequelizeを使ってNode.jsでMySQLテーブルを作成する方法

    SequelizeとはSequelizeは、PromiseベースのNode.js向けORM(Object-Relational Mapping)ライブラリです。PostgreSQL、MySQL、MariaDB、SQLite、Microsoft SQL Serverなど、主要なリレーショナルデータベースに幅広く対応しており、SQLを直接書かずにJavaScriptだけでデータベース操作を行えます。Sequelizeの主な機能は以下の通りです。トランザクションサポートリレーション(モデル間の関連付け)Eager Loading / Lazy Loading(即時読み込み・遅延読み込み)リードレプリ