トランザクションとストアドプロシージャ。この場合、なぜログテーブルが空になるのですか?

がっかり

私はMysqlを初めて使用します。おそらく、重要なことを知らないか、理解していません。

「始めた理由!!!」を教えてください。この場合、メッセージは挿入されませんか?

DELIMITER $$

CREATE TABLE `_debugLogTable` (
  `Message` varchar(255) DEFAULT NULL
) ENGINE=InnoDB $$


CREATE PROCEDURE `debug_msg`(msg VARCHAR(255))
BEGIN
        insert into _debugLogTable select msg;
END$$


 CREATE FUNCTION `ValueMeetsCondition`(value varchar(20)) RETURNS tinyint(1)
BEGIN
    DECLARE ConditionValue INTEGER;

    call debug_msg('begin !!!');

    SET ConditionValue = CAST(`value` AS UNSIGNED);

    call debug_msg('end !!!');

    RETURN TRUE;
END$$

DELIMITER ;

CAST関数が失敗することは知っていますが、なぜcall debug_msg('begin !!!');新しいレコードをテーブルに挿入しないのですか?!そこには取引はありません!

がっかり

答えを投稿したいだけです。将来誰かに役立つかもしれません。この私たちは持っています-

自動コミットモードが有効になっている場合、各SQLステートメントはそれ自体で単一のトランザクションを形成します。デフォルトでは、MySQLは自動コミットを有効にして新しい接続ごとにセッションを開始するため、SQLステートメントがエラーを返さなかった場合、MySQLは各SQLステートメントの後にコミットを実行します。ステートメントがエラーを返す場合、コミットまたはロールバックの動作はエラーによって異なります

私はこのように関数を呼び出します- select ValueMeetsCondition('>10')
したがって、実際にはMySQLによってトランザクションにラップされます。そのため、プロシージャ内の何かが失敗した場合、変更全体がロールバックされます。この方法でクエリを再作成begin !!すると、メッセージは挿入されますが、挿入されend !!ません

call debug_msg('begin !!!');

SET ConditionValue = CAST(`>10` AS UNSIGNED);

select ConditionValue;

call debug_msg('end !!!');

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ストアドプロシージャとトランザクションを使用して、他のテーブルのテーブル関連データに挿入するにはどうすればよいですか?

分類Dev

シングルスパアプリケーションがサブディレクトリにデプロイされている場合、ブラウザの更新で「ページが見つかりません」エラーが表示されます

分類Dev

プロシージャ内の単一のINSERTが明示的なトランザクションの対象とならないのはなぜですか?

分類Dev

Grailsプロジェクトをビルドするときに@Overrideアノテーションが機能しないのはなぜですか?

分類Dev

このMySQLストアドプロシージャが終了ハンドラを実行していないように見えるのはなぜですか?

分類Dev

コントローラにアクションがない場合、レールはどのようにページにルーティングしますか

分類Dev

クライアントと実際のアプリケーションが異なるコンテナーにある場合にトランザクションマネージャーを構成しますか?

分類Dev

デスクトップ環境のアプリケーションが他のDEのモジュール、ライブラリなどをロードしているかどうかをどのように知ることができますか?

分類Dev

GHCの場合-この小さなプログラムのレイジーバージョンがループベースのバリアントよりもはるかに高速なのはなぜですか?

分類Dev

jpaプロジェクトでドーザーを使用すると奇妙な現象が発生します。レイジーロードオブジェクトのマッピングアノテーションが機能しないのはなぜですか?

分類Dev

データベースの復元後にテーブルとストアドプロシージャが保存されないのはなぜですか?

分類Dev

ACIDトランザクションが必要な場合、CosmosDBストアドプロシージャで強制的に継続するポイントは何ですか

分類Dev

EntityFrameworkでのトランザクションなしのストアドプロシージャ

分類Dev

シェルコードテストプログラムでセグメンテーション違反が発生するのはなぜですか?

分類Dev

RedShiftでトランザクションが終了する前に暗黙のテーブルロックが解放されるのはなぜですか?

分類Dev

スレッドローカルマップにthreadlocalオブジェクトへの弱参照が含まれている場合、なぜガベージコレクションされないのですか?

分類Dev

ストアドプロシージャでのトランザクション

分類Dev

スタンドアロンアプリケーションにスクリプトエンジンを追加する必要があるのはなぜですか

分類Dev

このストアドプロシージャのすべてのトランザクションはロールバックされますか

分類Dev

このトランザクションがロールバックしないのはなぜですか?

分類Dev

ASP.Net Identityは、ユーザーがライブサイトにアクセスしたことがある場合、バージョンが異なるとデータベースが異なる場合でも、ユーザーを自動的にテストサイトにログインさせます。

分類Dev

Grailsがメソッドとしてアクションを持つコントローラーにシングルトンスコープを推奨するのはなぜですか?

分類Dev

P2Pダウンロードアプリケーション(BitCometなど)のリッスンポートがブロックされた場合、速度に影響するのはなぜですか?

分類Dev

静的にリンクされた実行可能ファイルにグローバルオフセットテーブルとプロシージャリンクテーブルがあるのはなぜですか?

分類Dev

Oracleのストアドプロシージャにグループトランザクションをコミットする方法

分類Dev

このソリューションで画面が小さい場合にジャンボトロンの高さが減らないのはなぜですか?

分類Dev

データベースのパフォーマンスの観点から、どちらのアプローチが優れていますか?操作ごとの1つのテーブルグループまたは複数のテーブルのシリアル化可能なトランザクションですか?

分類Dev

このAngularアプリケーションが、ユーザーがログインした後に表示されるコンテンツを変更するユーザーステータス(ログイン/ログアウト)を処理できないのはなぜですか?

分類Dev

ストアドプロシージャのアーキテクチャ-MVCアプリケーションでストアドプロシージャを処理する必要がありますか、それとも「ワーカーロール」に似たもので処理する必要がありますか?

Related 関連記事

  1. 1

    ストアドプロシージャとトランザクションを使用して、他のテーブルのテーブル関連データに挿入するにはどうすればよいですか?

  2. 2

    シングルスパアプリケーションがサブディレクトリにデプロイされている場合、ブラウザの更新で「ページが見つかりません」エラーが表示されます

  3. 3

    プロシージャ内の単一のINSERTが明示的なトランザクションの対象とならないのはなぜですか?

  4. 4

    Grailsプロジェクトをビルドするときに@Overrideアノテーションが機能しないのはなぜですか?

  5. 5

    このMySQLストアドプロシージャが終了ハンドラを実行していないように見えるのはなぜですか?

  6. 6

    コントローラにアクションがない場合、レールはどのようにページにルーティングしますか

  7. 7

    クライアントと実際のアプリケーションが異なるコンテナーにある場合にトランザクションマネージャーを構成しますか?

  8. 8

    デスクトップ環境のアプリケーションが他のDEのモジュール、ライブラリなどをロードしているかどうかをどのように知ることができますか?

  9. 9

    GHCの場合-この小さなプログラムのレイジーバージョンがループベースのバリアントよりもはるかに高速なのはなぜですか?

  10. 10

    jpaプロジェクトでドーザーを使用すると奇妙な現象が発生します。レイジーロードオブジェクトのマッピングアノテーションが機能しないのはなぜですか?

  11. 11

    データベースの復元後にテーブルとストアドプロシージャが保存されないのはなぜですか?

  12. 12

    ACIDトランザクションが必要な場合、CosmosDBストアドプロシージャで強制的に継続するポイントは何ですか

  13. 13

    EntityFrameworkでのトランザクションなしのストアドプロシージャ

  14. 14

    シェルコードテストプログラムでセグメンテーション違反が発生するのはなぜですか?

  15. 15

    RedShiftでトランザクションが終了する前に暗黙のテーブルロックが解放されるのはなぜですか?

  16. 16

    スレッドローカルマップにthreadlocalオブジェクトへの弱参照が含まれている場合、なぜガベージコレクションされないのですか?

  17. 17

    ストアドプロシージャでのトランザクション

  18. 18

    スタンドアロンアプリケーションにスクリプトエンジンを追加する必要があるのはなぜですか

  19. 19

    このストアドプロシージャのすべてのトランザクションはロールバックされますか

  20. 20

    このトランザクションがロールバックしないのはなぜですか?

  21. 21

    ASP.Net Identityは、ユーザーがライブサイトにアクセスしたことがある場合、バージョンが異なるとデータベースが異なる場合でも、ユーザーを自動的にテストサイトにログインさせます。

  22. 22

    Grailsがメソッドとしてアクションを持つコントローラーにシングルトンスコープを推奨するのはなぜですか?

  23. 23

    P2Pダウンロードアプリケーション(BitCometなど)のリッスンポートがブロックされた場合、速度に影響するのはなぜですか?

  24. 24

    静的にリンクされた実行可能ファイルにグローバルオフセットテーブルとプロシージャリンクテーブルがあるのはなぜですか?

  25. 25

    Oracleのストアドプロシージャにグループトランザクションをコミットする方法

  26. 26

    このソリューションで画面が小さい場合にジャンボトロンの高さが減らないのはなぜですか?

  27. 27

    データベースのパフォーマンスの観点から、どちらのアプローチが優れていますか?操作ごとの1つのテーブルグループまたは複数のテーブルのシリアル化可能なトランザクションですか?

  28. 28

    このAngularアプリケーションが、ユーザーがログインした後に表示されるコンテンツを変更するユーザーステータス(ログイン/ログアウト)を処理できないのはなぜですか?

  29. 29

    ストアドプロシージャのアーキテクチャ-MVCアプリケーションでストアドプロシージャを処理する必要がありますか、それとも「ワーカーロール」に似たもので処理する必要がありますか?

ホットタグ

アーカイブ