MYSQLストアドプロシージャ、つまり一般的な論理知識のポイントの要約

MYSQLストアドプロシージャ、つまり一般的な論理知識のポイントの要約

MySQL ストアド プロシージャ

1. ストアドプロシージャ構文(フォーマット)を作成する

区切り文字 $
CREATE PROCEDURE ストアド プロシージャ名 A (IN 受信パラメータ名 a INT、IN 受信パラメータ名 b VARCHAR(20)、OUT 戻りパラメータ名 c INT)
始める
  コンテンツ..........
終了 $

分析:

  • IN は入力パラメータを表し、入力パラメータ名を定義し、その後に入力パラメータの型 (INT、VARCHAR、DOUBLE、.....) が続きます。
  • OUT は、ストアド プロシージャの実行後に返されるデータを表します。パラメータ名を定義し、それにパラメータ タイプ (INT、VARCHAR、DOUBLE、.....) を続けます。
  • INOUT は、渡したり返したりできることを意味します。パラメータ名を定義し、それにパラメータ タイプ (INT、VARCHAR、DOUBLE、.....) を続けます。

2. ストアドプロシージャの特定の構文とロジック

A. 変数構文を定義します。

変数名パラメータ型(INT、VARCHAR(20)、BOOLEAN、.....)を宣言します[DEFAULT NULL];

注: パラメータ タイプの後に DEFAULT NULL を追加して初期値を設定できます。

B. 変数の割り当て:

方法1(変数に直接値を割り当てる):

定義された変数 a を NEW() に設定します。

方法 2 (SQL クエリの結果が変数に直接割り当てられる):

`student`.age を INTO 定義済み変数 a から `student` に選択し、 WHERE を実行します...........

方法 3 (SQL クエリの結果を複数の変数に直接割り当てる):

`student`.name AS 定義済み変数 a、`student`.age AS 定義済み変数 b を INTO 定義済み変数 a、定義済み変数 b から `student` に選択します ...............

c. 論理的推論:

#IF判断: 

         IF条件文 (3>5) THEN
        条件が TRUE の場合に実行します.........;
      終了の場合;
  #IF ELSE 判定:
      条件 (a>0) の場合
     条件が (a>0) の場合に実行します.......;
      それ以外の場合、条件 (a<0) の場合
         条件が (a<0) の場合に実行します.......;
      それ以外
         その他の処刑……
      終了の場合;

D. カーソル、(LOOP) ループ:

#例。単一カーソル ループ: create procedure my_procedure() -- ストアド プロシージャを作成する begin -- ストアド プロシージャを開始する define my_id varchar(32); -- カスタム変数 1
declare my_name varchar(50); -- カスタム変数 2
DECLARE done INT DEFAULT FALSE; -- カスタム制御カーソル ループ変数、デフォルトは false

DECLARE cur CURSOR FOR ( SELECT id, name FROM t_people ); -- カーソルを定義し、結果セットを入力します。DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 制御変数をカーソルにバインドすると、カーソル ループは自動的に true になります。
 
OPEN cur; -- カーソルを開きます posLoop: LOOP -- ループ本体を開始します。myLoop はカスタム ループ名です。FETCH cur into my_id, my_name を使用してループを終了します。 -- カーソルによって読み取られた現在の行のデータ シーケンスをカスタム変数 12 に割り当てます。
    IF done THEN -- ループを続行するかどうかを決定します LEAVE posLoop; -- ループを終了します END IF;
  -- 必要な操作を行うには、SQL でカスタム変数を直接使用できます。 UPDATE t_user SET c_name = my_name WHERE id = my_id and rtrim(ltrim(c_name)) = ''; -- 左右のスペースを削除します。 COMMIT; -- トランザクションをコミットします。 END LOOP posLoop; -- カスタム ループを終了します。 CLOSE cur; -- カーソルを閉じます。 END; -- ストアド プロシージャを終了します。
#例。マルチカーソル ループ: create procedure my_procedure() -- ストアド プロシージャを作成する begin -- ストアド プロシージャを開始する define my_id varchar(32); -- カスタム変数 1
declare my_name varchar(50); -- カスタム変数 2
DECLARE done INT DEFAULT FALSE; -- カスタム制御カーソル ループ変数、デフォルトは false

DECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); -- カーソルを定義し、結果セットを入力します。 DECLARE cur_2 CURSOR FOR ( SELECT id_2, name_2 FROM t_people_2 ); -- カーソルを定義し、結果セットを入力します。 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 制御変数をカーソルにバインドすると、カーソル ループは終了時に自動的に true になります。
 
OPEN cur_1; -- カーソルを開きます posLoop: LOOP -- ループ本体を開始します。myLoop はカスタム ループ名です。FETCH cur_1 into my_id, my_name を使用してループを終了します。 -- カーソルによって読み取られた現在の行のデータ シーケンスをカスタム変数 12 に割り当てます。
    IF done THEN -- ループを続行するかどうかを決定します LEAVE posLoop; -- ループを終了します END IF;
  -- 必要な操作を行うには、SQL でカスタム変数を使用するだけです。 UPDATE ..........; -- 実行したい特定の操作 END LOOP posLoop; -- カスタム ループ本体を終了します。 CLOSE cur_1; -- カーソルを閉じます。 SET done = FALSE; -- 最初のカーソルがトラバースされると、その値はハンドラーによって TRUE に設定されます。 set を使用して FALSE に設定しないと、2 番目のカーソルはトラバースしません。 (カーソルを実際に移動できることを確認するために、カーソルを開く各操作の前にこのステートメントを使用するのが最適です)
 
 OPEN cur_2; -- カーソル posLoop_2 を開きます: LOOP -- ループ本体を開始します。myLoop はカスタム ループ名です。FETCH cur_2 into my_id, my_name を使用してループを終了します。 -- カーソルによって読み取られた現在の行のデータ シーケンスをカスタム変数 12 に割り当てます。
    IF done THEN -- ループを続行するかどうかを決定します LEAVE posLoop_2; -- ループを終了します END IF;
  -- 必要な操作を行うには、SQL でカスタム変数を直接使用できます INSERT ..........; -- 実行したい特定の操作 END LOOP posLoop_2; -- カスタム ループ本体を終了します CLOSE cur_2; -- カーソルを閉じます END; -- ストアド プロシージャを終了します

3. ストアドプロシージャの呼び出し

#戻り値のないストアド プロシージャを呼び出します CALL ストアド プロシージャ名 (パラメーター.....);

#戻り値を持つストアド プロシージャを呼び出す (戻り値を取得する)

ストアドプロシージャ名 (@aaa); を呼び出します。
@aaa を選択します。

4. ストアドプロシージャを削除する

DROP PROCEDURE ストアド プロシージャ名;

5. 注意事項

ストアド プロシージャ内のセミコロン (;) は非常に重要なので省略しないでください。

以下もご興味があるかもしれません:
  • MySQLの論理アーキテクチャに関する深い理解
  • MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明
  • MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します
  • Mysql論理アーキテクチャの詳細な説明
  • MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明
  • PHPを使用してMySqlデータベースにアクセスする論理操作と追加、削除、変更、チェックの例
  • MySql ストアド プロシージャの論理的判断と条件制御
  • MySQLはテーブルデータを復元するためにfrmファイルとibdファイルを使用します
  • MySQLはデータ復旧を実装するためにbinlogログを使用する
  • 時点に基づくMySQLクイックリカバリソリューション
  • MySQL5.7 mysqldump バックアップとリカバリの実装
  • MySQL 論理バックアップとリカバリ テストの概要

<<:  VMware Workstation での VMware vSphere のセットアップ (グラフィック チュートリアル)

>>:  Vueを使用して手書き署名機能を実装する

推薦する

ウェブページを作成するために最もよく使用されるHTMLタグ

1. よく使われるHTMLタグの最適化HTML は Web 編集者にとって基本的なスキルであるべきで...

CSS 境界線の長さ制御機能の実装

以前は、境界線の長さをコンテナーよりも小さくする必要があったときに、div ネストを使用していました...

モバイルウェブ画面適応(rem)

序文最近、フロントエンドの学習に関する以前のメモを整理したところ、モバイル Web 画面の適応 (r...

mysql5.7.22 ダウンロードプロセス図

1. 公式ウェブサイト www.mysql.com にアクセスし、ダウンロードを選択します。 2. ...

VMware Workstationはデバイス/資格情報ガードと互換性がありません

仮想マシンをインストールするときに、「VMware ワークステーションはデバイス/資格情報ガードと互...

HTML減量 HTMLタグを合理化してWebページを作成する

HTML4 についてHTML (XHTML ではありません)、MIME タイプは text/html...

JS の原価と基準価額の問題に関する簡単な分析

プリミティブ値 -> プリミティブ型Number String Boolean undefin...

MySQL でテーブル メタデータ ロックを待機する理由と方法

MySQL が alter table などの DDL 操作を実行すると、テーブル メタデータ ロッ...

MySQL データベース開発の 36 の原則 (要約)

序文これらの原則は実際の戦闘から要約されています。あらゆる原則の背後には血なまぐさい教訓があるこれら...

jsフェッチ非同期リクエストの使用の詳細な例

目次非同期を理解するフェッチ(url)レスポンス.json() asyncとawaitを組み合わせる...

MySQL データ定義言語 DDL の基本ステートメント

MySQL DDL ステートメントDDL、DMLとは何ですか。 DDL はデータ定義言語であり、CR...

HTML テーブルタグチュートリアル (7): 背景色属性 BGCOLOR

テーブルの背景色は、BGCOLOR 属性を通じて設定できます。基本的な構文<テーブル BGCO...

子コンポーネントで vue activated を使用する詳細

ページ: ベース: <テンプレート> <div class="タブコンテ...

セマンティック HTML 構造の利点は何ですか?

1つ: 1.セマンティック タグは単なる HTML であり、CSS にはセマンティクスはありません...

mysql binlog (バイナリログ) を表示する方法

たとえば、新しいテーブルを作成したり、既存のテーブルのデータを更新したりすると、これらのイベントは、...