Node.js - MySQLにデータを插入する
こんにちは、未来のプログラミングスーパースターたち!今日は、Node.jsとMySQLの世界に興味深い旅に出ます。具体的には、Node.jsを使用してMySQLデータベースにデータを插入する方法に焦点を当てます。プログラミングの初心者でも安心してください - 私があなたの親切なガイドとして、すべてをステップバイステップで説明します。では、さあ始めましょう!
Node.jsとMySQLとは?
始める前に、まずNode.jsとMySQLとは何かを簡単に理解しましょう:
- Node.js: JavaScriptの強力なランタイムで、パソコン上でJavaScriptを実行できるようにします。ウェブブラウザだけでなくです。
- MySQL: データを保存し、管理するための人気のデータベースシステムです。
Node.jsをシェフ、MySQLを大きな整理された冷蔵庫と考えましょう。私たちはNode.jsを使用してコードを作り、MySQLの冷蔵庫にデータを入れるのです!
環境の設定
まず第一に、私たちのキッチン(つまり開発環境)を設定する必要があります。以下の手順を踏んでください:
- 公式ウェブサイト(nodejs.org)からNode.jsをインストールします。
- mysql.comからMySQLをインストールします。
- ターミナルで以下のコマンドを実行して、Node.js用のMySQLモジュールをインストールします:
npm install mysql
素晴しい!今ではすべての材料が準備できています。では、料理...つまりコーディングを始めましょう!
Node.jsでの插入
接続の確立
データを插入する前に、MySQLデータベースに接続する必要があります。以下のようにします:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database_name'
});
connection.connect((err) => {
if (err) {
console.error('データベース接続エラー: ' + err.stack);
return;
}
console.log('データベースに接続しました。');
});
以下を分解します:
- 先ほどインストールしたMySQLモジュールを要求します。
-
mysql.createConnection()
を使用して接続を作成し、データベースの詳細を提供します。 -
connection.connect()
を使用してデータベースに実際に接続します。 - エラーが発生した場合、それをログに記録します。それ以外の場合、接続確認を行います。
シンプルなINSERTクエリ
これで接続が確立したので、データを插入してみましょう!users
テーブルがあり、id
、name
、email
というカラムがあると仮定します。新しいユーザーを以下のように插入します:
const newUser = { name: 'John Doe', email: '[email protected]' };
connection.query('INSERT INTO users SET ?', newUser, (error, results) => {
if (error) throw error;
console.log('新しいユーザーが追加されました。ID: ' + results.insertId);
});
ここで何が起こっているのでしょう?
-
newUser
オブジェクトを作成し、插入したいデータを設定します。 -
connection.query()
を使用してSQLクエリをデータベースに送信します。 - クエリ内の
?
はプレースホルダーで、MySQLはそれをnewUser
オブジェクトに置き換えます。 - 成功した場合、MySQLはいくつかの結果を返し、新しいレコードのIDを含みます。
複数のレコードの插入
一度に複数のユーザーを追加したい場合はどうでしょうか?それもできます!
const users = [
{ name: 'Alice', email: '[email protected]' },
{ name: 'Bob', email: '[email protected]' },
{ name: 'Charlie', email: '[email protected]' }
];
connection.query('INSERT INTO users (name, email) VALUES ?', [users.map(user => [user.name, user.email])], (error, results) => {
if (error) throw error;
console.log('挿入されたレコード数: ' + results.affectedRows);
});
新しい点は以下の通りです:
- ユーザーオブジェクトの配列を作成します。
-
users.map()
を使用して配列をMySQLが期待する形式に変換します。 - プレースホルダー
?
は複数の値セットを表します。 -
results.affectedRows
は挿入されたレコードの数を教えます。
プリペアドステートメントでのINSERT
さあ、プレパラードステートメントでレベルアップしましょう。これらは、データ(材料)を毎回変更するだけで何度も使えるレシピのようです。
const sql = "INSERT INTO users (name, email) VALUES (?, ?)";
const values = ['David', '[email protected]'];
connection.query(sql, values, (error, results) => {
if (error) throw error;
console.log('新しいユーザーが追加されました。ID: ' + results.insertId);
});
ここで特別な点は以下の通りです:
- SQLクエリとデータを分離しています。
- クエリ内の
?
プレースホルダーはデータが置かれる場所を表します。 -
values
配列をquery()
メソッドの別の引数として渡します。
この方法はセキュリティが高く、SQLインジェクション攻撃を防ぐことができます。信頼できるレシピを使うのと同じです!
プリペアドステートメントの再利用
プリペアドステートメントの真正の力は再利用にあります:
const sql = "INSERT INTO users (name, email) VALUES (?, ?)";
const users = [
['Eva', '[email protected]'],
['Frank', '[email protected]'],
['Grace', '[email protected]']
];
users.forEach(user => {
connection.query(sql, user, (error, results) => {
if (error) throw error;
console.log('新しいユーザーが追加されました。ID: ' + results.insertId);
});
});
ここでは、同じSQL「レシピ」を各ユーザーごとにデータ(材料)を変更して再利用しています。
接続の閉じる
料理が終わったらキッチンを閉じましょう!つまり、クエリが完了したらデータベース接続を閉じます:
connection.end((err) => {
if (err) {
console.error('データベース接続終了エラー: ' + err.stack);
return;
}
console.log('データベース接続を閉じました。');
});
これにより、不要な接続を開けっ放しにすることなく、アプリケーションやデータベースサーバーのパフォーマンスを低下させるのを防ぎます。
メソッドのまとめ
ここで学んだメソッドの簡単な参照表を示します:
メソッド | 説明 |
---|---|
mysql.createConnection() |
MySQLデータベースに接続を作成します |
connection.connect() |
データベース接続を確立します |
connection.query() |
SQLクエリを実行します |
connection.end() |
データベース接続を閉じます |
結論
おめでとうございます!あなたは刚刚Node.jsを使用してMySQLデータベースにデータを插入する方法を学びました。単純な插入、複数の插入、そしてプリペアドステートメントまでカバーしました。練習が habits つくりますので、これらの概念を実践してみてください。
私の教師としての経験から言えば、実際にやることで学ぶのが一番です。それでは、小さなプロジェクトを作ってみませんか?お気に入りのレシピをデータベースに保存するシンプルなアプリ、例えば?そうすることで、新しいスキルを実践し、おばあちゃんの秘伝のクッキーレシピを決して失うことのないようにできます!
ハッピーコーディング、そしてあなたのデータベースが常に適切に正規化されていることを祈っています!
Credits: Image by storyset