最近、データベース データのスケジュールされた移行を実行する必要があります。実行プロセス中に何らかの理由で SQL ステートメントがエラーを報告してデータ転送の混乱を引き起こすのを防ぐには、スクリプトのトランザクションを制御する必要があります。 まずtran_testテーブルを作成します テーブルtran_testを作成します( f1 VARCHAR(10) NULLではない、 f2 INT(1) デフォルト NULL、 主キー (f1) )エンジン=INNODB 文字セット=utf8 tran_test に 2 つのデータを挿入したいのですが、挿入中にエラーが発生しないように、トランザクション内で挿入ステートメントを制御したいと思います。 この時、何人かの方の記事を確認すると、このような回答が返ってくることが多いです。 トランザクションを開始します。 tran_test に VALUES('A',1) を挿入します。 tran_test に VALUES('B',2) を挿入します。 ロールバック; または トランザクションを開始します。 tran_test に VALUES('A',1) を挿入します。 tran_test に VALUES('B',2) を挿入します。 専念; これらの SQL ステートメントは非常に単純に見え、実際にコミットまたはロールバックできます。 しかし、これで本当に私たちの目標は達成できるのでしょうか?答えはノーです。 たとえば、最初の段落では、正しいかどうかに関係なく、トランザクション内のすべての SQL ステートメントが ROLLBACK されます。このような絶対的なロールバックにより、SQL は無意味になります。 したがって、トランザクションを真に制御したい場合、実行される SQL に対して異常検出を実行することが私の考えです。 SQL に例外がない場合は COMMIT、例外がキャッチされた場合は ROLLBACK します。 この時点で、例外をキャプチャするためのストアド プロシージャを構築する必要があります。実行が成功した場合は COMMIT が実行され、SQL 実行が失敗した場合は ROLLBACK が実行されます。 望む効果を得るには2つの方法があります。 1 つ目は、実行する SQL の例外をキャプチャすることです。変数 t_error を定義します。例外がキャプチャされたら、t_error=1 とします。次に、t_error の条件判断を行います。t_error=1 の場合は ROLLBACK を実行し、それ以外の場合は COMMIT を実行します。 存在する場合は t_test プロシージャを削除します。 区切り文字 // プロシージャ t_test() を作成する 始める t_error INTEGER を宣言します。 SQLEXCEPTION の CONTINUE ハンドラーを宣言し、t_error = 1 を設定します。 トランザクションを開始します。 tran_test に VALUES('A',1) を挿入します。 tran_test に VALUES('B',2) を挿入します。 t_error = 1の場合 ロールバック; それ以外 専念; 終了の場合; 終わり// t_test() を呼び出します。 もう1つは最初のものの簡略化であり、例外がキャッチされた場合はROLLBACKが直接実行され、例外がキャッチされない場合はCOMMITが直接実行されます。 存在する場合は t_test プロシージャを削除します。 区切り文字 // プロシージャ t_test() を作成する 始める SQLEXCEPTION ROLLBACK の終了ハンドラを宣言します。 トランザクションを開始します。 tran_test に VALUES('A',1) を挿入します。 tran_test に VALUES('B',2) を挿入します。 専念; 終わり// t_test() を呼び出す このようにして、2 つの挿入ステートメントは 1 つのトランザクション内で実際に制御されます。 今回は上記の例をテストしていただけます。その他の補足やご質問がある場合は、編集者に直接お問い合わせください。123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: EclipseのプロジェクトをTomcatに追加できない問題を解決する方法
目次MySQLをインストールする環境変数の設定MySQLをインストールするmysqlをダウンロードし...
目次1. dfコマンド2. duコマンド3. fsckファイルシステム修復コマンド4. ディスクステ...
この記事ではMySQL 8.0.22のインストールと設定について記録します。具体的な内容は以下のとお...
キーの入力を求められた場合は、[キーがありません]を選択します。デスクトップエクスペリエンスを選択す...
序文node.js でサーバーを作成するのは非常に簡単です。小さいながらも完全な Web サーバーを...
以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...
1. 時間の種類は次のように分けられます。 1. ネットワーク時間(タイムゾーンの設定、ntpサーバ...
目次ノードのバージョンが一致しない、ノードをアップグレードまたはダウングレードするnvm を使用して...
ngx_lua_module は、lua パーサーを nginx に埋め込み、lua 言語で記述され...
この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...
Tomcatの設定まずTomcatをインストールするTomcatのインストールは、Tomcatのイン...
この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...
Java開発キットjdkをダウンロードするJDK のダウンロード アドレスはhttp://www.o...
序文クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があり...
目次1. オブジェクトのプロパティ1.1 属性表記2. プロパティ名を計算する3.オブジェクトメソッ...