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 でマウスが停止したときに行全体の色 (tr) を変更する方法

純粋な CSS を使用して、マウスが行の上を通過するときに行の背景色を変更し、その行にフォーカスがあ...

MySQLリモート接続失敗の解決策

以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...

MySQLでテーブルインデックスを構築する方法

目次複数の種類のフィルタリングをサポート複数の範囲のクエリを避ける並べ替えを最適化するインデックスの...

インタラクティブデザインでページングと読み込みのどちらを選択するかについての説明

この記事の著者@子木yoyoが個人ブログに投稿したものです。 Web ページでもモバイル アプリでも...

Windows での MySQL5 グリーン バージョンのインストールの概要 (推奨)

1 MySQLをダウンロードするダウンロードアドレス: http://downloads.mysq...

NexusはHTTPSプロトコルをサポートするためにnginxプロキシを使用します

背景すべての会社の Web サイトは HTTPS プロトコルをサポートする必要があります。Aliba...

CSS と HTML とフロントエンド テクノロジーのレイヤー図

フロントエンドテクノロジー層 (写真は少し極端ですが、参考までに) Javascript と DOM...

Docker 用ビジュアル UI 管理ツール Portainer のインストールと使用方法の分析

Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な展開、コンテナ ...

Vue コンポーネントの構成構造とコンポーネント登録の詳細

目次1. コンポーネントの構成2. コンポーネント名2.1 コンポーネントの命名3. グローバル登録...

Linux nlコマンドの使い方

1. コマンドの紹介nl (行数) は指定されたファイルに行番号を追加し、標準出力に書き込みます。フ...

MySQL 8.0.18はデータベースにユーザーを追加し、権限を付与します

1. データベースにログインするには、rootユーザーを使用することをお勧めします。 mysql -...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...

Vuexの役割についての深い理解

目次概要コンポーネント間でデータを共有する方法Vuex の原則の紹介Vuexはコンポーネントのグロー...

よく使われる Docker コマンドと例の概要と分析

目次1. コンテナライフサイクル管理(1)ドッカー実行(2)スタート/ストップ/リスタート(3)ドッ...

Windows で IP アドレスを指定してサーバーへのリモート アクセスを設定する方法

当社には、外部ネットワークからの干渉を受けることが多いサーバーが多数あります。侵入者はポート 338...