タグ: MySQL

  • PrismaをJavaScriptプロジェクトで使ってMySQLを簡単に操作する方法

    この記事では、JavaScriptプロジェクトにPrismaを導入して、MySQLデータベースに接続し、簡単に操作する方法をわかりやすく解説します。

    Prismaとは?

    Prismaは、Node.jsやJavaScriptプロジェクトで使えるORM(Object-Relational Mapping)ツールです。これを利用すると、SQLを書かずに直感的で安全にデータベースを操作できます。

    Step1:Prismaのインストール

    まず、npmを使ってPrismaをプロジェクトに追加します。

    npm install @prisma/client
    npm install prisma --save-dev

    次に、Prismaの初期設定を行います。

    npx prisma init

    このコマンドを実行すると、プロジェクト内にprisma/schema.prismaというファイルが生成されます。

    Step2:データベース接続設定

    schema.prismaを開き、MySQLデータベースへの接続設定を記述します。

    datasource db {
      provider = "mysql"
      url      = env("DATABASE_URL")
    }
    
    generator client {
      provider = "prisma-client-js"
    }

    プロジェクトのルートにある.envファイルに接続情報を設定します。

    DATABASE_URL="mysql://ユーザー名:パスワード@ホスト名:ポート番号/データベース名"

    Step3:データモデルの定義

    次に、データモデルを定義します。

    model User {
      id        Int      @id @default(autoincrement())
      name      String
      email     String   @unique
      createdAt DateTime @default(now())
    }

    Step4:データベースに反映

    モデルの設定が終わったら、次のコマンドでデータベースに反映させます。

    npx prisma migrate dev --name init

    これでPrismaがMySQLにテーブルを作成します。

    Step5:JavaScriptでPrismaを使う

    以下のようにPrismaを使ってデータを操作できます。

    // PrismaClientのインスタンスを生成
    const { PrismaClient } = require('@prisma/client');
    const prisma = new PrismaClient();
    
    async function main() {
      // ユーザーの作成
      const newUser = await prisma.user.create({
        data: {
          name: 'John Doe',
          email: 'john@example.com'
        }
      });
    
      console.log('作成したユーザー:', newUser);
    
      // ユーザー一覧を取得
      const users = await prisma.user.findMany();
      console.log('ユーザー一覧:', users);
    }
    
    main()
      .then(async () => {
        await prisma.$disconnect();
      })
      .catch(async (e) => {
        console.error(e);
        await prisma.$disconnect();
        process.exit(1);
      });

    まとめ

    Prismaを使えば、JavaScriptプロジェクトから簡単かつ安全にMySQLを操作でき、開発速度を大幅に向上させることができます。ぜひプロジェクトで試してみてください。

  • C#とMySQLでトランザクションを実現する方法

    導入

    データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、C#の.NET8、EFCore8でMySQLデータベースを扱う際のトランザクションの基本的な使い方を解説します。

    環境設定

    .NET8SDKが必要です。インストールしていない場合は、下記からインストールしてください。

    .NET のダウンロード (Linux、macOS、Windows) (microsoft.com)

    続いて、プロジェクト作成後、下記のパッケージを追加します。

    dotnet add package Microsoft.EntityFrameworkCore
    dotnet add package MySql.Data.EntityFrameworkCore

    DbContextの設定

    DbContextを設定し、EF Coreがデータベース操作を行えるようにします。以下のコードを参考にしてください。

    今回は簡単のために接続文字列をDbContext に書いていますが、設定ファイル等から読み込めるようにしてください。

    using Microsoft.EntityFrameworkCore;
    
    public class MyDbContext : DbContext
    {
        public DbSet<Employee> Employees { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySQL("server=localhost;database=myDatabase;user=myUser;password=myPassword");
        }
    }
    
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Position { get; set; }
    }

    トランザクションの開始

    EF CoreのDatabaseプロパティを使用してトランザクションを開始し、管理します。

    using var context = new MyDbContext();
    using var transaction = context.Database.BeginTransaction();
    
    try
    {
        context.Employees.Add(new Employee { Name = "Jane Doe", Position = "Web Developer" });
        context.SaveChanges();
    
        transaction.Commit();
        Console.WriteLine("Transaction committed successfully.");
    }
    catch (Exception ex)
    {
        transaction.Rollback();
        Console.WriteLine($"An error occurred: {ex.Message}");
    }

    2行目でトランザクションを貼っています。

    6行目でDbContextに値を追加し、7行目で確定させます。

    9行目でトランザクションを完了させます。

    13行目で例外があった場合、トランザクションをロールバックさせます。context.SaveChages() 実行後でも、例外が発生すれば、ロールバックさせます。

    ベストプラクティス

    DbContext、トランザクションを使用する際には、その範囲を最小限にすることが推奨されます。また、エラーハンドリングを適切に行い、予期しない失敗からデータを保護することが重要です。

    まとめ

    MySql.Data.EntityFrameworkCoreを使用することで、EF Core 8とC#を用いたMySQLデータベース操作が容易になります。この記事が、より安全で効率的なデータベース管理の実現に役立つことを願っています。

  • JavaScriptとMySQLでトランザクションを実現する方法

    導入

    データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、Node.js環境でMySQLデータベースを扱う際のトランザクションの基本的な使い方を解説します。

    環境設定

    まず、mysqlモジュールをプロジェクトにインストールする必要があります。Node.jsのプロジェクトルートで以下のコマンドを実行してください。

    npm install mysql

    データベース接続

    次に、MySQLデータベースへの接続を設定します。この例では、データベースの設定を含むcreateConnectionメソッドを使用しています。

    const mysql = require('mysql');
    
    const connection = mysql.createConnection({
      host: 'localhost',
      user: 'username',
      password: 'password',
      database: 'databaseName'
    });
    
    connection.connect(err => {
      if (err) throw err;
      console.log('データベースへの接続に成功しました!');
    });

    トランザクションの開始

    トランザクションを開始するには、beginTransactionメソッドを使用します。これにより、以降のクエリが一つのトランザクションとして扱われます。

    connection.beginTransaction(err => {
      if (err) throw err;
      // トランザクション開始後の処理
    });

    トランザクション内のクエリ実行

    トランザクション内で複数のクエリを実行します。各クエリが成功したことを確認しながら進めます。

    クエリが失敗した場合、ロールバックが行われます。

    クエリにある「?」には、左から順にデータ配列の中身が挿入されます。これによって、SQLインジェクション攻撃を防いでいます。

    const query1 = 'INSERT INTO table_name (column1) VALUES (?)';
    const data1 = ['value1'];
    
    connection.query(query1, data1, (err, results) => {
      if (err) {
        return connection.rollback(() => {
          throw err;
        });
      }
      
     const query2 = 'UPDATE table_name SET column2 = ? WHERE column1 = ?';
     const data2 = ['value2', 'value1'];
    
     connection.query(query2, data2, (err, results) => {
       if (err) {
         return connection.rollback(() => {
           throw err;
         });
       }
       // コミット処理へ
     });
    });

    トランザクションのコミットと終了

    全てのクエリが成功した場合、commitメソッドを呼び出してトランザクションをコミットします。

    connection.commit(err => {
      if (err) {
        return connection.rollback(() => {
          throw err;
        });
      }
      console.log('トランザクションのコミットに成功!');
    });

    まとめ

    このように、Node.jsとMySQLを使用してトランザクションを管理することで、データの整合性を確保しつつ効率的にデータベース操作を行うことができます。トランザクションの正しい扱い方を学ぶことは、任意のバックエンド開発者にとって重要なスキルの一つです。