sql >> データベース >  >> RDS >> Mysql

BEGIN...ENDコンテキスト内または外部およびLOOP構文のSTARTTRANSACTION

    1. いいえ:複合ステートメントは、ストアドプログラムの本体内でのみ使用できます。

    2. START TRANSACTION; およびCOMMIT; 個別のステートメントです。ストアドプログラムの本体に複数のステートメントを含める場合は、それらのステートメントをBEGIN ... ENDなどのある種の複合ステートメントブロックで囲む必要があります。 (これは、ステートメントのブロックを中かっこで囲むのと似ています{ ... } Cのような言語内)。

      そうは言っても、できた 単一ステートメントのSTART TRANSACTION;のみを含むストアドプログラムがある またはCOMMIT; —このようなプログラムは、複合ステートメントブロックを必要とせず、それぞれ新しいトランザクションを開始するか、現在のトランザクションをコミットするだけです。

      複合ステートメントブロックが許可されていないストアドプログラムの外部では、START TRANSACTION;を発行できます。 およびCOMMIT; 必要に応じてステートメントを作成します。

    3. LOOP 複合ステートメントブロックでもあり、ストアドプロシージャ内でのみ有効です。 必要ではありません LOOPを囲む BEGIN ... END内のブロック 通常ですが、ブロックします(そうでない場合、必要なループの初期化を実行するのは困難です)。

    ループ構造からテーブルにデータを挿入したい場合は、次のいずれかを行う必要があります。

    • LOOPを使用するストアドプログラムを定義します;

    • 各反復でデータベースクエリを実行する外部プログラムでループを反復します。または

    • SQLが直接操作できるセットの観点からロジックを再定義します。




    1. 単一のクエリ(再帰クエリ)でmysqlテーブル内のすべての親を検索する

    2. PostgreSQLでのAcosh()のしくみ

    3. SQL ServerのNEWID()とNEWSEQUENTIALID():違いは何ですか?

    4. Html/PhpフォームがSQLデータベースに追加されない