ホームページ データベース mysql チュートリアル MySQLトランザクション処理例の説明

MySQLトランザクション処理例の説明

May 19, 2017 pm 03:20 PM

mysql トランザクション処理

すべてのエンジンがトランザクション処理をサポートしているわけではありません 第 21 章で述べたように、MySQL はいくつかの基本的なデータベース エンジンをサポートしています。この章で説明したように、すべてのエンジンが明示的なトランザクション管理をサポートしているわけではありません。 MyISAM と InnoDB は、最も一般的に使用される 2 つのエンジンです。前者は明示的なトランザクション管理をサポートしていませんが、後者は明示的なトランザクション管理をサポートしています。このため、本書で使用されているサンプル テーブルは、より一般的に使用されている MyISAM ではなく InnoDB を使用するように作成されています。アプリケーションにトランザクション処理機能が必要な場合は、必ず正しいエンジン タイプを使用してください。

トランザクション処理は、データベースの整合性を維持するために使用でき、MySQL 操作のバッチが完全に実行されるか、まったく実行されないかを保証します。

リレーショナル データベース設計では、データを複数のテーブルに保存することで、データの操作、保守、再利用が容易になります。リレーショナル データベースの設計方法と理由については説明しませんが、適切に設計されたデータベース スキーマはすべて、ある程度リレーショナルです。

前に使用した注文テーブルが良い例です。注文は、orders と orderitem の 2 つのテーブルに保存されます。orders は実際の注文を保存し、orderitems は注文された商品を保存します。 2 つのテーブルは、主キーと呼ばれる一意の ID を使用して相互に関連付けられます。これら 2 つのテーブルは、顧客情報と製品情報を含む他のテーブルに関連付けられています。

システムに注文を追加するプロセスは次のとおりです:

(1) 対応する顧客がデータベースに存在するかどうかを確認し(顧客テーブルからのクエリ)、存在しない場合はその顧客を追加します。

(2) 顧客のIDを取得します。

(3) 注文テーブルに行を追加し、顧客 ID に関連付けます。

(4) 注文テーブルに割り当てられた新しい注文 ID を取得します。

(5) 注文された商品ごとに orderitems テーブルに行を追加し、

から ID を取得して orderitems テーブルに関連付けます (そして、製品 ID によって products テーブルに関連付けます)。

ここで、ある種のデータベース障害 (ディスク容量の超過、セキュリティ制限、テーブルのロックなど) により、このプロセスが完了できないと仮定します。データベース内のデータはどうなりますか?

顧客の追加後、注文テーブルの追加前に障害が発生した場合は、問題はありません。一部の顧客が注文を受けないことは完全に合法です。プロセスが再実行されると、挿入された顧客レコードが取得されて使用されます。問題が発生したところからプロセスを効果的に開始できます。

しかし、orders 行が追加された後、orderitems 行が追加される前にエラーが発生した場合はどうなるでしょうか?現在、データベースには空の注文があります。

orderitems 行を追加している途中でシステムが失敗した場合は、さらに悪いことに。その結果、データベースには不完全な注文が存在しますが、ユーザーはそれを知りません。

この問題を解決するにはどうすればよいですか?ここではトランザクション処理を使用する必要があります。トランザクション処理は、データベースに不完全な操作結果が含まれないようにするためにバッチで実行する必要がある MySQL 操作を管理するために使用されるメカニズムです。トランザクションを使用すると、一連の操作が途中で停止されず、(明示的に指示されない限り) 全体として実行されるか、まったく実行されないことを保証できます。エラーが発生しない場合、ステートメントのセット全体がデータベース テーブルにコミット (書き込み) されます。エラーが発生した場合は、ロールバック (元に戻す) してデータベースを既知の安全な状態に復元します。同じ例を見て、今回はプロセスがどのように機能するかを説明します。

(1) 該当する顧客がデータベースに存在するか確認し、存在しない場合は追加します。

(2) 顧客情報を送信します。

(3) 顧客のIDを取得します。

(4) 注文テーブルに行を追加します。

(5) 注文テーブルへの行の追加中に障害が発生した場合はフォールバックします。

(6) 注文テーブルに割り当てられた新しい注文 ID を取得します。

(7) 注文された商品ごとに、orderitems テーブルに新しい行を追加します。

(8) orderitems への新しい行の追加中に障害が発生した場合は、追加されたすべての orderitems 行と orders 行をロールバックします。

(9) 注文情報を送信します。

トランザクションおよびトランザクション処理を使用する場合、繰り返し現れるキーワードがいくつかあります。

トランザクション処理について知っておくべきいくつかの用語があります:

1. トランザクションは、一連の SQL ステートメントを指します。

2. ロールバック (ロールバック) は、指定された SQL ステートメントを元に戻すプロセスを指します。送信 (コミット) は、保存されていない SQL ステートメントの結果をデータベース テーブルに書き込むことを指します。 セーブポイント (セーブポイント) は、トランザクション処理で設定された一時的なプレースホルダー (プレースホルダー) を指します。トランザクション全体が異なります)。

【関連する推奨事項】

1.

mysql無料ビデオチュートリアル

2.

MySQL UPDATEトリガー(更新)とトリガーの詳細な分析

3.

MySQL削除トリガー(削除)の使い方の詳細な説明

4.

MySQLの挿入トリガー(insert)の詳しい説明

5. mysqlトリガーの紹介とトリガーの作成・削除方法

以上がMySQLトランザクション処理例の説明の詳細内容です。詳細については、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

See all articles