1 MySQLの自動コミット設定MySQL はデフォルトで自動的にコミットします。つまり、各 DML (追加、削除、変更) ステートメントは個別のトランザクションとして暗黙的にコミットされます。ステータスがクローズに変更された場合、DML ステートメントを有効にするには手動で送信する必要があります。 mysql> 'autocommit' のような変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | 自動コミット | オン | +---------------+-------+ グローバル自動コミットが有効になっているかどうかを確認します。 mysql> 'autocommit' のようなグローバル変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | 自動コミット | オン | +---------------+-------+ 自動コミット変数を変更することで、操作をオン/オフにすることができます。 現在のセッションの自動コミット モードをオフにします。mysql> set autocommit=0; mysql> 'autocommit' のような変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | 自動コミット | オフ | +---------------+-------+ グローバル自動コミットはまだ有効です。mysql> show global variables like 'autocommit'; +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | 自動コミット | オン | +---------------+-------+ グローバル自動コミットを無効にする mysql> グローバル自動コミットを 0 に設定します。 mysql> 'autocommit' のようなグローバル変数を表示します。 +---------------+-------+ | 変数名 | 値 | +---------------+-------+ | 自動コミット | オフ | +---------------+-------+ 再起動後も MySQL サービスを有効にしたい場合は、システム環境変数を設定する必要があります。 MySQL 5.7 cnf 構成ファイルの [mysqld] の下に自動コミット値を設定します。 [mysqld] ... 自動コミット=0 Springでの自動送信の制御MySQL JDBC ドライバ パッケージ mysql-connector-java は、デフォルトでセッション接続の自動コミットを有効にします。たとえば、mysql-connector-java-8.0.22 バージョンのコードは次のようになります。 //com.mysql.cj.protocol.a.NativeServerSession.java プライベートブール値 autoCommit = true; HikariCP、druid などのよく使用されるデータベース接続プールも、デフォルトで自動コミットを有効にし、接続の自動コミット設定を true に変更します。 com.alibaba.druid.pool.DruidAbstractDataSource.java 保護された揮発性ブール値の defaultAutoCommit = true; ... パブリック void initPhysicalConnection(Connection conn、Map<String, Object> variables、Map<String, Object> globalVariables) は SQLException をスローします { conn.getAutoCommit() が defaultAutoCommit と異なる場合、 //接続の自動コミットをtrueに設定する conn.setAutoCommit(デフォルトのAutoCommit); } ... } HikariCP は、デフォルトで autocommit を true に設定して DataSource を初期化します。 com.zaxxer.hikari.HikariConfig.java パブリックHikariConfig() { ... isAutoCommit は true です。 } PlatformTransactionManager トランザクション マネージャーによって管理される明示的なトランザクション (@Transactional アノテーション宣言など) の場合、トランザクションが開かれると自動コミット モードはオフになります。 コードは次のとおりです。 @オーバーライド 保護された void doBegin(オブジェクトトランザクション、トランザクション定義定義) { DataSourceTransactionObject txObject = (DataSourceTransactionObject) トランザクション; 接続 con = null; 試す { ........ // 必要に応じて手動コミットに切り替えます。これは一部のJDBCドライバでは非常にコストがかかります。 // 不必要にそれを行いたくありません(例えば、明示的に // 接続プールはすでに設定されているように構成されています。 con.getAutoCommit() の場合 { txObject.setMustRestoreAutoCommit(true); ロガーがデバッグ有効の場合 logger.debug("JDBC接続[" + con + "]を手動コミットに切り替えています"); } //自動コミットモードをオフにする con.setAutoCommit(false); } ....... } キャッチ (Throwable ex) { ....... } } 要約するMySQL の自動コミット モードはデフォルトでオンになっています。手動の DML 操作によるエラーを防ぐために、本番環境をデフォルトのクローズ状態に設定できます。通常、JDBC 接続プールはデフォルトで有効になっており、構成可能です。明示的なトランザクションでは、クローズ状態に設定されます。データベース環境の自動コミットを変更するだけでは、コードの動作には影響しません。 以上がMySQLとSpringの自動コミットについての詳しい説明です。MySQLの自動コミットについてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご覧ください! 以下もご興味があるかもしれません:
|
<<: XHTML 入門チュートリアル: よく使われる XHTML タグ
>>: JavaScript 配列と非配列オブジェクトのディープ クローンとシャロー クローンの原則の詳細な説明
インデックスはソートされたデータ構造です。 where 条件での検索や order by 条件での並...
1. ブリッジ: デフォルトでは VMnet0 が使用されます1. 原則:ブリッジは、それぞれ 2...
この記事では、MySQL で find_in_set() 関数を使用して where in() の順...
メインライブラリの実行 CREATE DATABASE test CHARACTER SET utf...
目次落とし穴充填方法何の穴ですか?要約する落とし穴最近、仕事で商品の割引価格を計算すると、いつも1セ...
1. はじめに先ほど、フロントエンドの表示の問題について説明しました。では、前のコンテンツに戻って、...
序文モバイル端末の開発の過程で、モバイル端末のディスプレイはデスクトップ端末のディスプレイとは一般的...
背景: parseInt(0.006) または parseInt(0.0006) は 0 という値を...
導入現在、k8s は非常に人気があり、それについて学ぶために本を購入しました。しかし、k8s では数...
3つのモードブリッジ(ブリッジ モード)、NAT(ネットワーク アドレス変換モード)、ホストオンリー...
現在のスクロール オフセットを html 要素の属性に追加することで、現在のスクロール位置に基づいて...
プロジェクトをリリースするときに、キャッシュをクリーンアップする必要があるという問題に遭遇することが...
JSを使用して、参考用の簡単な計算機を完成させます。具体的な内容は次のとおりです。要件: 入力値は数...
序文仮想通貨の狂気的な投機により、マイニングウイルスは犯罪者が最も頻繁に使用する攻撃方法の 1 つに...
目次1. SQL言語の基本機能の紹介2. データ定義言語の目的3. データベースの作成と破棄4. デ...