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を使用して手書き署名機能を実装する

推薦する

MySQL 5.7 でルートパスワードを変更する方法に関するチュートリアル

バージョンアップデートにより、元のユーザーのパスワードフィールドがauthentication_st...

Docker での FastAPI デプロイの詳細なプロセス

Docker 学習https://www.cnblogs.com/poloyy/p/15257059...

HTML の値属性と名前属性の機能と使用法の紹介

1. ボタンで使用される値は、「OK」、「削除」など、ボタンに表示されるテキストを指します。 2. ...

Photoshop を使って Web ワイヤーフレームを作成する方法

この投稿では、通知、画像とビデオ、フォーム フィールド、タイトル、段落、箇条書きリスト、ナビゲーショ...

Linux での Centos7 ファイアウォールの基本的な使用方法の詳細な説明

1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...

JavaScript を使用してページに動的な検証コードを実装する例

導入:現在、プログラム攻撃を防ぐために、ユーザーがログインまたは登録するときに多くの動的検証テクノロ...

Chrome タブバーを実装するための CSS のヒント

今回は、Google Chrome のタブバーのような、特殊な丸い角を持つナビゲーション バーのレイ...

React 関数コンポーネントのパフォーマンス最適化のアイデアの詳細な説明

最適化のアイデア最適化には主に 2 つの方向があります。再レンダリングの回数を減らします。 Reac...

Vue でのキープアライブコンポーネントの使用例

問題の説明(キープアライブとは何か)キープアライブ 名前の通り、アクティブな状態を維持します。誰が活...

Vue で動的パラメータと計算プロパティを使用する方法

1. 動的パラメータ2.6.0 以降では、角括弧で囲まれた JavaScript 式をディレクティブ...

CSSは複数の要素をボックスの両端に揃える効果を実現します

要素の両端を揃える配置レイアウトは、実際の開発のいたるところで見られます。これは、フレックスレイアウ...

Docker で Oracle 11g イメージ構成をプルダウンする際の問題を分析する

1. イメージをプルするdocker pull レジストリ.cn-hangzhou.aliyuncs...

MySQL で二重引用符の位置が誤っていたために起きた殺人事件の詳細な分析

1. はじめに最近、開発者が誤ってデータを削除したり更新したりするケースがよくあります。今回もまた問...

MySQL サービスを起動できない問題の解決策を含む MySQL 5.7.17 インストール チュートリアル

.net 開発に関しては、Microsoft の SQL Server データベースに精通しており、...