MySql はコミットする必要がありますか?

MySql はコミットする必要がありますか?

MySQL が挿入などの操作を実行するときにコミットする必要があるかどうかは、ストレージ エンジンによって異なります。

MyISAM などのエンジンがトランザクションをサポートしていない場合、コミットは効果がありません。

InnoDBなどのトランザクションをサポートするエンジンの場合は、トランザクションが自動トランザクション送信(コミット)をサポートしているかどうかを知る必要があります。

データベースが自動的にコミットされるかどうかを確認するには、mysql> show variables like '%autocommit%'; を使用します。オフの場合、自動的にコミットされないため、手動でコミットする必要があります (コマンドラインで「commit;」コマンドを直接使用できます)。それ以外の場合は、自動的にコミットされます。

送信されるデータには、明示的な送信、暗黙的な送信、自動送信の 3 種類があります。

これら 3 つのタイプについて以下に説明します。

明示的なコミット

COMMIT コマンドを使用して直接実行されるコミットは明示的なコミットです。

暗黙のコミット

SQL コマンドによって間接的に完了する送信は暗黙的な送信です。コマンドは次のとおりです。

ALTER、AUDIT、COMMENT、CONNECT、CREATE、DISCONNECT、DROP、EXIT、GRANT、NOAUDIT、QUIT、REVOKE、RENAME 。

自動送信

AUTOCOMMITがONに設定されている場合、挿入、変更、または削除ステートメントが実行された後、

システムが自動的に送信します。これは自動送信です。形式は次のとおりです: SQL>SET AUTOCOMMIT ON;

COMMIT / ROLLBACK コマンドを使用するときは注意してください。 COMMIT / ROLLBACK は、DML ステートメント (INSERT / DELETE / UPDATE / SELECT) を実行した後に使用されます。 DML ステートメントが実行されると、処理されたデータはロールバック セグメントに配置され (SELECT ステートメントを除く)、ユーザーによるコミット (COMMIT) またはロールバック (ROLLBACK) を待機します。ユーザーが COMMIT / ROLLBACK を実行すると、ロールバック セグメントに配置されたデータは削除されます。 (SELECT 文が実行されると、データは共有プールに保存されます。同じデータを他のユーザーにクエリ用に提供する場合、データベースにアクセスせずに共有プールから直接抽出されるため、データ クエリの速度が向上します。)

すべての DML ステートメントは明示的にコミットする必要があります。つまり、DML ステートメントの実行後に COMMIT を実行する必要があります。 DDL ステートメントなどのその他のものは暗黙的にコミットされます。つまり、これらの非 DML ステートメントを実行した後、データベースは既に暗黙的なコミットを実行しています。たとえば、CREATE TABLE スクリプトを実行した後は、テーブルが作成されているため、明示的なコミットを実行する必要はありません。

以下もご興味があるかもしれません:
  • PHP+MySQL トランザクションのロールバックとコミットの例

<<:  ReactでのDOM操作の実装

>>:  Linux\Nginx 環境での仮想ドメイン名の設定とテスト検証

推薦する

JS 非同期実行の原則とコールバックの詳細

1. JSの非同期実行の原則JavaScript はシングルスレッドですが、ブラウザはマルチスレッド...

WebWorkerはJavaScriptサンドボックスの詳細をカプセル化します

目次1. シナリオ2. IJavaScriptShadowboxを実装する2.1 メインスレッドの実...

CentOS 7.3 で Nginx 仮想ホストを設定する方法

実験環境最小限にインストールされた CentOS 7.3 仮想マシン基本環境を構成する1. ngin...

Vueはグラフィック検証コードを実装する

この記事の例では、グラフィック検証コードを実装するためのVueの具体的なコードを参考までに共有してい...

HTML いくつかの特別な分割線効果

1. 基本ライン 2. 特殊効果(効果は独立しておらず、互いに組み合わせることができます) 1. 両...

シェルスクリプトによるDockerコンテナの起動順序の制御の詳細な説明

1. 遭遇した問題分散プロジェクトの展開プロセスでは、サーバーの再起動後にアプリケーション(データベ...

MySQL 悲観的ロックと楽観的ロックの実装

目次序文実際の戦闘1. ロックなし2. 悲観的ロック3. 楽観的ロック要約する序文悲観的ロックと楽観...

CSS3で実装された炎のアニメーション

成果を達成する実装コードhtml <div class="コンテナ">...

体験をデザインする: ボタンには何があるか

<br />最近、UCDChina は「インターフェース上のテキストに注意を払う」という...

Dockerイメージ解析ツールのダイブ原理解析

今日は、Docker イメージ、各レイヤーの内容を調べ、Docker/OCI イメージのサイズを縮小...

ReactプロジェクトでのTypeScriptの実装

目次1. はじめに2. 使用方法ステートレスコンポーネントステートフルコンポーネント制御コンポーネン...

CSS3 で less のテキストの長い影を実装する

この記事では主に、CSS3 LESS で長いテキストの影を実装する方法を紹介し、皆さんと共有します。...

実用的な基本的な Linux sed コマンドのサンプルコード

Linux ストリーム エディターは、データ センターでスクリプトを実行するのに便利な方法です。これ...

CentOS7 は yum を使用して mysql 8.0.12 をインストールします

この記事では、centos7にyumを使用してMySQL 8.0.12をインストールする詳細な手順を...