ホームページ データベース mysql チュートリアル Go 言語を使用して MySQL データベースで ACID 操作を実行する方法

Go 言語を使用して MySQL データベースで ACID 操作を実行する方法

Jun 17, 2023 am 10:45 AM
言語を移動 mysqlデータベース 酸性操作

インターネットの急速な発展とデジタル化に伴い、さまざまなビッグデータの形成と処理が現在最も重要なことの一つとなっています。データ処理において、リレーショナル データベースは重要な役割を果たします。 MySQL は現在最も人気のあるリレーショナル データベースの 1 つであり、ビッグ データ処理でよく使用されます。 ACID (原子性、一貫性、分離性、耐久性) は、リレーショナル データベースの最も基本的なトランザクション処理機能であり、データに対して何らかの操作を実行するときに従わなければならない原則でもあります。この記事では、Go 言語を使用して MySQL データベースで ACID 操作を実行する方法を紹介します。

1. 必要なパッケージをインストールする

MySQL データベース操作に Go 言語を使用し始める前に、いくつかの必要なパッケージをインストールする必要があります。最も一般的なのは mysql ドライバーで、次のコマンドを使用してインストールできます。

go get github.com/go-sql-driver/mysql
ログイン後にコピー

MySQL 開発に Gorm フレームワークを使用している場合は、次のパッケージ

go get -u github.com/jinzhu/gorm
go get -u github.com/go-sql-driver/mysql
ログイン後にコピー

2 をインストールする必要があります。データベースへの接続

Go 言語を使用して MySQL データベース操作を実行する前に、MySQL データベースに接続する必要があります。以下は、MySQL データベースに接続するためのサンプルコードです。

import (
  "database/sql"
  _ "github.com/go-sql-driver/mysql"
)

func main(){
    db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/database_name")
    if err != nil {
        panic(err.Error())
    }
}
ログイン後にコピー

これは、最も基本的な接続コードの例です。このうち、mysql はドライバーの名前、root:password はユーザー名とパスワード、127.0.0.1:3306 はサーバーのアドレスとポート番号、database_name は接続するデータベースの名前です。接続プロセスを使用する場合は、接続タイムアウトなどの他のパラメーターも使用する必要があります。特定のパラメータは、関連ドキュメントを参照して変更できます。

3. トランザクション操作

トランザクション操作とは、データベース内の一連の操作を指し、すべてが正常に実行された後にのみデータベースに適用されます。 Go では、SQL パッケージの Tx を使用してトランザクション操作を実行できます。以下は、基本的なトランザクション操作の例です。

import (
  "database/sql"
  "fmt"
  _ "github.com/go-sql-driver/mysql"
)

func main(){
    db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/database_name")
    if err != nil {
        panic(err.Error())
    }

    tx, err := db.Begin()
    if err != nil {
        fmt.Println(err)
    }

    _, err = tx.Exec("INSERT INTO table_name (column1, column2) VALUES (?, ?)", value1, value2)
    if err != nil {
        fmt.Println(err)
        tx.Rollback()
    } else {
        _, err = tx.Exec("UPDATE table_name SET column1 = ? WHERE column2 = ?", value1, value2)
        if err != nil {
            fmt.Println(err)
            tx.Rollback()
        } else {
            tx.Commit()
        }
    }
}
ログイン後にコピー

これは基本的なトランザクション操作の例です。このプログラムでは 2 つの操作が実行されます。1 つ目はデータの挿入で、2 つ目はデータの更新です。両方の操作が正常に実行されると、トランザクションはコミットされます。いずれかの操作が失敗すると、トランザクションはロールバックされ、すべての変更が元に戻されます。

4. 分離レベル

トランザクション操作を実行する場合、分離レベルを考慮する必要があります。 MySQL では分離レベルを、非コミット読み取り (コミットされていない読み取り)、コミット読み取り (コミットされた読み取り)、反復可能読み取り (反復可能読み取り)、およびシリアライズ可能 (シリアル化可能) の 4 つのレベルに分けています。デフォルトで使用される分離レベルは、Repeatable Read です。トランザクションを使用する場合、DB.Transaction() メソッドを使用して分離レベルを指定できます。以下は例です:

func main() {
    db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/database_name")
    if err != nil {
        panic(err.Error())
    }

    txOptions := &sql.TxOptions{
        Isolation: sql.LevelSerializable,
    }
    tx, err := db.BeginTx(context.Background(), txOptions)
    if err != nil {
        panic(err.Error())
    }
}
ログイン後にコピー

この例では、シリアル化可能レベルの分離レベルを選択しました。分離レベルを変更する必要がある場合は、LevelSerializable を変更するだけです。

5. 概要

この記事では、Go 言語を使用して MySQL データベースで ACID 操作 (データベースへの接続、トランザクション操作、分離レベルなど) を実行する方法を紹介しました。コードの正確性を保証するには、ACID ガイドラインに従って、異常な状態が発生したときにデータが正しく保存されるようにする必要があります。同時に、分離レベルを使用してデータベースの一貫性と信頼性を判断する方法も学ぶ必要があります。

以上がGo 言語を使用して MySQL データベースで ACID 操作を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? Apr 02, 2025 pm 12:57 PM

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Apr 02, 2025 pm 05:09 PM

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

SQL.Openを使用するとき、DSNが空に渡されたときにエラーを報告しないのはなぜですか? SQL.Openを使用するとき、DSNが空に渡されたときにエラーを報告しないのはなぜですか? Apr 02, 2025 pm 12:54 PM

SQL.Openを使用する場合、DSNがエラーを報告しないのはなぜですか? GO言語では、sql.open ...

See all articles