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 環境での仮想ドメイン名の設定とテスト検証

推薦する

Vue グローバル フィルターの概念、注意事項、基本的な使用方法

目次1. フィルターの概念1. グローバルフィルターのフォーマットをカスタマイズする2. フィルター...

Linux で最も頻繁に使用されるターミナル コマンドのトップ 10 のリストを取得します。

私が最も頻繁に使用するコマンドは次の通りです:選択肢CDギットls ssh須藤数週間前、私はこの R...

Docker で php-nginx-alpine イメージをゼロから構築する方法

これまでにも Docker 環境でいくつかのプロジェクトを実行したことはありますが、まだイメージをよ...

MySQL 5.7 zip版(zip版)のインストールと設定手順の詳細

はじめに: Windows 10 を再インストールし、同時にファイルを整理しました。しかし、MySQ...

vite を使用して vue3 アプリケーションを構築する方法

1. インストールヒント: 現在、VUE3.0 の公式翻訳ドキュメントはありません。しかし、すでに誰...

Vue でのルータービューコンポーネントの使用に関する詳細な説明

Vue プロジェクトを開発する場合、さまざまなコンポーネント ページを表示するために切り替えることが...

17の広告効果測定の解釈

1. 広告の 85% は未読です<br />解釈: 成功する広告の 15% にどうやって...

Kubernetes の応用分野の概要

Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...

MySQL 最適化戦略 (推奨)

要約すれば: 1. データベースの設計とテーブルの作成時にパフォーマンスを考慮する2. SQLの記述...

Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル

以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...

Facebook 出会い系サイトデザインのユーザー エクスペリエンス分析

<br />関連記事: Facebookの情報アーキテクチャの分析 元記事: http:...

UbuntuへのDocker CEのインストール

この記事は、Ubuntu 17.10 での Docker CE のインストールを記録するために使用さ...

MySQL テーブルの垂直分割と水平分割

垂直分割垂直分割とは、データテーブルの列を分割すること、つまり、多くの列を持つテーブルを複数のテーブ...

ナビゲーションバーコンポーネントをVueでカプセル化する

はじめに:ナビゲーション バーなどのコンポーネント ベースのアイデアを使用して機能モジュールを完全に...

Linux でのマルチスレッドおよびマルチプロセス クラッシュのシミュレーションに関する簡単な説明

結論:マルチスレッド環境では、スレッドの 1 つがクラッシュすると、他のスレッド (プロセス全体) ...