検索
ホームページデータベースmysql チュートリアルmysqlのトランザクション処理とは何ですか

mysqlのトランザクション処理とは何ですか

Nov 11, 2022 pm 05:32 PM
mysqlトランザクション処理

mysql では、トランザクション処理は、データベースに不完全な操作結果が含まれないようにバッチで実行する必要がある MySQL 操作を管理するために使用されるメカニズムです。トランザクション処理は、データベースの整合性を維持するために使用できます。 MySQL 操作のバッチは途中で停止せず、完全に実行されるか、まったく実行されないことが保証されます。

mysqlのトランザクション処理とは何ですか

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

トランザクション処理

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

たとえば、人事管理システムでは、個人を削除するには、その個人の基本情報だけでなく、メールボックスや記事など、その個人に関連する情報も削除する必要があります。このように、これらのデータベースの操作ステートメントはトランザクションを構成します。

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

一般に、トランザクションは 4 つの条件 (

ACID) を満たす必要があります。 Atomicity(Aomicity,または不可分性)、一貫性(C一貫性)、孤立性( I孤立性、独立性とも呼ばれます)、持続性(D耐久性)。

  • 原子性: トランザクション内のすべての操作は完了するか完了しないかのいずれかであり、中間リンクで終了することはありません。トランザクションの実行中にエラーが発生した場合は、トランザクションがまったく実行されなかったかのように、トランザクションが開始される前の状態にロールバックされます。

  • 一貫性: データベースの整合性は、トランザクションの開始前およびトランザクションの終了後に破壊されません。これは、書き込まれるデータが、データの精度や連結など、事前に設定されたすべてのルールに完全に準拠する必要があり、後続のデータベースが所定の作業を自発的に完了できることを意味します。

  • 分離: データベースでは、複数の同時トランザクションが同時にデータの読み取り、書き込み、変更を行うことができます。分離すると、次の理由により複数のトランザクションが同時に実行されるのを防ぐことができます。クロス実行はデータの不整合を引き起こします。トランザクション分離は、非コミット読み取り、コミット読み取り、反復読み取り、シリアル化可能など、さまざまなレベルに分かれています。

  • 永続性: トランザクション完了後のデータへの変更は永続的であり、システムに障害が発生した場合でも失われることはありません。

#1.1 キーワードトランザクションおよびトランザクション処理を使用する場合、繰り返し現れるキーワードがいくつかあります。トランザクション処理について知っておく必要がある用語をいくつか紹介します:

    トランザクション:
  • は一連の SQL ステートメントを指します;
  • ロールバック ( ロールバック):
  • は、指定された SQL ステートメントを元に戻すプロセスを指します ;
  • 送信 (コミット):
  • は、保存されていない SQL ステートメントの結果をデータベースに書き込むことを指しますtable;
  • セーブポイント:
  • は、ロールバック (トランザクション全体のロールバックとは異なります) を発行できる、トランザクション内に設定された一時的なプレースホルダー (プレースホルダー) を指します。
#1.2 トランザクション制御ステートメント

トランザクション処理を管理する鍵は、SQL ステートメント グループを論理ブロックに分解することです

そして、データをいつロールバックすべきか、いつロールバックすべきでないのかを明確に指定します。

##1.2.1 START TRANSACTION トランザクションの開始

MySQL は、次のステートメントを使用して

トランザクションの開始を識別します。
START  TRANSACTION

1.2.2 COMMIT

一般的な MySQL ステートメントは、データベース テーブルに対して直接実行され、書き込まれます。これはいわゆる implicit commit (暗黙的なコミット)、つまり送信 (書き込みまたは保存) 操作が自動的に実行されます
ただし、トランザクション ブロックでは、コミットは暗黙的に実行されません。明示的にコミットするには、COMMIT ステートメント を使用します。COMMIT はトランザクションをコミットし、データベースに加えられたすべての変更を永続的にします;以下に示す:

START TRANSACTION  
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;

この例では、注文 20010 がシステムから完全に削除されます。これには、orders と orderItems という 2 つのデータベース テーブルの更新が含まれるため、注文が部分的に削除されないようにトランザクション ブロックが使用されます。 最後の COMMIT ステートメントは、エラーが発生しない場合にのみ変更を書き込みます。最初の DELETE が成功しても 2 番目の DELETE が失敗した場合、DELETE はコミットされません (実際には自動的に取り消されます)。

#1.2.3 ROLLBACK

MySQL の

ROLLBACK コマンドは、MySQL ステートメントをロールバック (元に戻す) するために使用されます 、次のように:

SELECT * FROM orderitems;
START TRANSACTION        -- 事务开始
DELETE FROM orderitems;
SELECT * FROM orderitems;
ROLLBACK;
SELECT * FROM orderitems;
上の例は、ordertotals テーブルの内容を表示することから始まります。まず SELECT を実行して、テーブルが空でないことを示します。次に、


トランザクション処理 , を開始し、DELETE ステートメントを使用して ordertotals 内のすべての行を削除します。 別の SELECT ステートメントは、ordertotals が実際に空であることを検証します。 この時点で、ROLLBACK ステートメントを使用して、START TRANSACTION 以降のすべてのステートメントをロールバックします。最後の SELECT ステートメントは、テーブルが空ではないことを示します。
明らかに、ROLLBACK はトランザクション内 (START TRANSACTION コマンドの実行後) でのみ使用できます。

トランザクション処理は、INSERT、UPDATE、および DELETE ステートメントを管理するために使用されます。 SELECT ステートメントをロールバックすることはできません。 (これもあまり意味がありません。) CREATE または DROP 操作をロールバックすることはできません。これら 2 つのステートメントはトランザクション ブロック内で使用できますが、ロールバックを実行しても元に戻されません。

1.2.4 保持ポイント

単純な ROLLBACK および COMMIT ステートメントで、トランザクション全体の書き込みまたはキャンセルが可能です 。ただし、これは単純なトランザクションでのみ可能であり、より複雑なトランザクションでは部分的なコミットまたはロールバックが必要になる場合があります。

トランザクションの一部のロールバックをサポートするには、トランザクション ブロック内の適切な場所にプレースホルダーを配置する必要があります。こうすることで、ロールバックする必要がある場合に、プレースホルダーにフォールバックできます。

これらのプレースホルダーは保持ポイントと呼ばれます。 プレースホルダーを作成するには、次の SAVEPOINT ステートメント を使用できます。

SAVEPOINT delete1;

各保持ポイントには、それを識別する一意の名前が付いているため、ロールバック時に、MySQL どこにフォールバックするかを知っています。

次の操作は、指定された保持ポイントにフォールバックできます:

ROLLBACK TO delete1;

1.2.5 デフォルトの送信動作の変更

前述したように、デフォルトはMySQL の動作では、すべての変更が自動的にコミットされます。つまり、MySQL ステートメントを実行するたびに、ステートメントは実際にテーブルに対して実行され、変更はすぐに有効になります。変更を自動的にコミットしないように MySQL に指示するには、次のステートメントを使用する必要があります:

SET autocommit = 0;

autocommit フラグは、COMMIT ステートメントの有無に関係なく、変更を自動的にコミットするかどうかを決定します 。 autocommit を 0 (false) に設定すると、MySQL は (autocommit が true に設定されるまで) 変更を自動的にコミットしないよう指示します。

接続用のフラグ 特殊な自動コミット フラグは、サーバーではなく接続ごとにあります。

1.3 トランザクション処理メソッド

MYSQL のトランザクション処理には、主に 2 つのメソッドがあります。

BEGIN、ROLLBACK、COMMIT を使用して実装します

  • 1)
  • BEGIN
トランザクションを開始します

2) ROLLBACK

トランザクション ロールバック

3)COMMIT

トランザクションの確認

例:

START TRANSACTION; -- 开始事务
INSERT INTO runoob_transaction_test VALUE(5);
INSERT INTO runoob_transaction_test VALUE(6);
COMMIT; -- 提交事务

select * from runoob_transaction_test;

  • SET を直接使用して MySQL の自動送信モードを変更します:

SET AUTOCOMMIT=0 自動送信を無効にする

# SET AUTOCOMMIT=1 自動送信をオンにする

[関連する推奨事項:

mysql ビデオ チュートリアル ]

以上がmysqlのトランザクション処理とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのストアドプロシージャとは何ですか?MySQLのストアドプロシージャとは何ですか?May 01, 2025 am 12:27 AM

ストアドプロシージャは、パフォーマンスを向上させ、複雑な操作を簡素化するためのMySQLのSQLステートメントを事前に拡大します。 1。パフォーマンスの改善:最初のコンピレーションの後、後続の呼び出しを再コンパイルする必要はありません。 2。セキュリティの改善:許可制御を通じてデータテーブルアクセスを制限します。 3.複雑な操作の簡素化:複数のSQLステートメントを組み合わせて、アプリケーションレイヤーロジックを簡素化します。

クエリキャッシュはMySQLでどのように機能しますか?クエリキャッシュはMySQLでどのように機能しますか?May 01, 2025 am 12:26 AM

MySQLクエリキャッシュの実用的な原則は、選択クエリの結果を保存することであり、同じクエリが再度実行されると、キャッシュされた結果が直接返されます。 1)クエリキャッシュはデータベースの読み取りパフォーマンスを改善し、ハッシュ値を使用してキャッシュされた結果を見つけます。 2)単純な構成、mysql構成ファイルでquery_cache_typeとquery_cache_sizeを設定します。 3)SQL_NO_CACHEキーワードを使用して、特定のクエリのキャッシュを無効にします。 4)高周波更新環境では、クエリキャッシュがパフォーマンスボトルネックを引き起こし、パラメーターの監視と調整を通じて使用するために最適化する必要がある場合があります。

他のリレーショナルデータベースでMySQLを使用することの利点は何ですか?他のリレーショナルデータベースでMySQLを使用することの利点は何ですか?May 01, 2025 am 12:18 AM

MySQLがさまざまなプロジェクトで広く使用されている理由には、次のものがあります。1。複数のストレージエンジンをサポートする高性能とスケーラビリティ。 2。使いやすく、メンテナンス、シンプルな構成とリッチツール。 3。豊富なエコシステム、多数のコミュニティとサードパーティのツールサポートを魅了します。 4。複数のオペレーティングシステムに適したクロスプラットフォームサポート。

MySQLのデータベースアップグレードをどのように処理しますか?MySQLのデータベースアップグレードをどのように処理しますか?Apr 30, 2025 am 12:28 AM

MySQLデータベースをアップグレードする手順には次のものがあります。1。データベースをバックアップします。2。現在のMySQLサービスを停止します。3。MySQLの新しいバージョンをインストールします。アップグレードプロセス中に互換性の問題が必要であり、Perconatoolkitなどの高度なツールをテストと最適化に使用できます。

MySQLに使用できるさまざまなバックアップ戦略は何ですか?MySQLに使用できるさまざまなバックアップ戦略は何ですか?Apr 30, 2025 am 12:28 AM

MySQLバックアップポリシーには、論理バックアップ、物理バックアップ、増分バックアップ、レプリケーションベースのバックアップ、クラウドバックアップが含まれます。 1. Logical BackupはMySqldumpを使用してデータベースの構造とデータをエクスポートします。これは、小さなデータベースとバージョンの移行に適しています。 2.物理バックアップは、データファイルをコピーすることで高速かつ包括的ですが、データベースの一貫性が必要です。 3.インクリメンタルバックアップは、バイナリロギングを使用して変更を記録します。これは、大規模なデータベースに適しています。 4.レプリケーションベースのバックアップは、サーバーからバックアップすることにより、生産システムへの影響を減らします。 5. Amazonrdsなどのクラウドバックアップは自動化ソリューションを提供しますが、コストと制御を考慮する必要があります。ポリシーを選択するときは、データベースサイズ、ダウンタイム許容度、回復時間、および回復ポイントの目標を考慮する必要があります。

MySQLクラスタリングとは何ですか?MySQLクラスタリングとは何ですか?Apr 30, 2025 am 12:28 AM

mysqlclusteringenhancesdatabaserobustnessnessnessnessnessnistandistributiondistributingdataacrossmultiplenodes.itesthendbenginefordatareplication andfaulttolerance、保証highavailability.setupinvolvesconfiguringmanagement、data、ssqlnodes、carefulmonitoringringandpe

MySQLのパフォーマンスのためにデータベーススキーマ設計を最適化するにはどうすればよいですか?MySQLのパフォーマンスのためにデータベーススキーマ設計を最適化するにはどうすればよいですか?Apr 30, 2025 am 12:27 AM

MySQLのデータベーススキーマ設計の最適化は、次の手順を通じてパフォーマンスを改善できます。1。インデックス最適化:一般的なクエリ列にインデックスを作成し、クエリのオーバーヘッドのバランスをとり、更新を挿入します。 2。テーブル構造の最適化:正規化または反通常化によりデータ冗長性を削減し、アクセス効率を改善します。 3。データ型の選択:Varcharの代わりにINTなどの適切なデータ型を使用して、ストレージスペースを削減します。 4。パーティション化とサブテーブル:大量のデータボリュームの場合、パーティション化とサブテーブルを使用してデータを分散させてクエリとメンテナンスの効率を改善します。

MySQLのパフォーマンスをどのように最適化できますか?MySQLのパフォーマンスをどのように最適化できますか?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance、soflowthesesteps:1)properindexingtospeedupqueries、2)useexplaintoanalyzeandoptimize Queryperformance、3)AductServerContingSettingStingsinginginnodb_buffer_pool_sizeandmax_connections、4)

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター