MySQL ストアド プロシージャの概念、原則、一般的な使用法の詳細な説明

MySQL ストアド プロシージャの概念、原則、一般的な使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの概念、原則、および一般的な使用法について説明します。ご参考までに、詳細は以下の通りです。

1. ストアドプロシージャの概念

Pascal などの一部の言語には、「プロシージャ」と「関数」という概念があります。PHP にはプロシージャはなく、関数のみがあります。

プロシージャ: 複数のステートメントをカプセル化します。呼び出されると、これらのカプセル化された本体は関数を実行します。戻り値を持つ「プロシージャ」
要約: プロシージャは戻り値を持たない関数です

MySQLの場合:

複数のSQL文をカプセル化して、プロシージャという名前を付けます。このプロシージャをデータベースに保存します(ストアドプロシージャ)。

2. ストアドプロシージャを作成する

プロシージャ procedureName() を作成します
始める
  //--SQL ステートメント終了$

3. 既存のストアドプロシージャを表示する

手順のステータスを表示

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

プロシージャ procedureName を削除します。

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

procedureName() を呼び出します。

6. 最初のストアドプロシージャ

注: ここでは、MySQL 終了識別子を $ に変更しました。$ に設定する方法を知りたい場合は、別の記事「MySQL トリガー」を参照してください。

プロシージャ p1() を作成する
始める
  2+3を選択します。
終了$

電話:

p1() を呼び出す。

結果を表示:

這里寫圖片描述

7. 変数の導入

ストアド プロシージャはプログラム可能なので、変数、式、制御構造を使用して複雑な関数を完成させることができます。ストアド プロシージャでは、declare を使用して変数を宣言します。

変数名 変数型 [デフォルト デフォルト値] を宣言する

使用:

プロシージャ p2() を作成する
始める
  年齢を int のデフォルト 18 と宣言します。
  高さを int のデフォルト 180 として宣言します。
  concat('年齢:',age,'身長:',height) を選択します。
終了$

結果を表示:

這里寫圖片描述

8. 表現の紹介

ストアド プロシージャでは、+-*/ などの SQL ステートメント内の有効な操作に変数を使用できます。変数の割り当て形式は次のとおりです。

set 變量名:= expression

使用:

プロシージャ p3() を作成する
始める
  年齢を int のデフォルト 18 と宣言します。
  年齢を := 年齢 + 20 に設定します。
  select concat('20年後の年齢:',age);
終了$

結果を表示:

這里寫圖片描述

9. 選択制御構造を導入する

形式:

条件が
  声明
そうでない場合
  声明
それ以外
  声明
終了の場合;

使用:

プロシージャ p4() を作成する
始める
  年齢を int のデフォルト 18 と宣言します。
  年齢が18歳以上の場合
  「古い」を選択します。
  それ以外
  「未成年者」を選択します。
  終了の場合;
終了$

結果を表示:

這里寫圖片描述

10. ストアドプロシージャへのパラメータの受け渡し

ストアド プロシージャ定義の括弧内で、パラメータを宣言できます。構文は次のとおりです。

[in/out/inout] 參數名參數類型

使用:

プロシージャ p5(幅 int、高さ int) を作成します。
始める
  select concat('あなたのエリアは:',width * height) as area;
  幅 > 高さの場合
    「あなたは太っています」を選択します。
  そうでない場合は幅<高さ
    「あなたは痩せています」を選択します。
  それ以外
  「比較する」を選択します。
  終了の場合;
終了$

結果を表示:

這里寫圖片描述

11. whileループ構造を使用する

要件: 1から100まで追加

使用:

プロシージャ p6() を作成する
始める
  合計 int のデフォルトを 0 と宣言します。
  num int のデフォルトを 0 と宣言します。
  num <= 100 の間
    合計を := 合計 + 数値 と設定します。
    num を num + 1 に設定します。
  終了しながら;
  合計を選択;
終了$

結果を表示:

這里寫圖片描述

12. ストアドプロシージャパラメータの入力と出力の種類

要件には、in、out、inoutの3つの主な種類があります。1からNまで
入力データは指定した値であり、出力データは指定した変数名であり、出力変数値を読み込むために使用されます。

(1)in型、inは入力行パラメータであり、入力を受け入れることができる。

プロシージャ p7(in n int) を作成します。
始める
  合計 int のデフォルトを 0 と宣言します。
  num int のデフォルトを 0 と宣言します。
  num <= n の間
    合計を := 合計 + 数値 と設定します。
    num を num + 1 に設定します。
  終了しながら;
  合計を選択;
終了$

電話:

p7(100)を呼び出します。

出力:

這里寫圖片描述

(2)out型のパラメータ

プロシージャ p8(in n int,out total int) を作成します。
始める
  num int のデフォルトを 0 と宣言します。
  合計を 0 に設定します。
  num <= n の間
    合計を := 合計 + 数値 と設定します。
    num を num + 1 に設定します。
  終了しながら;
終了$

電話:

call p8(100,@total); --100は入力パラメータ、@totalは出力変数です select @total; --output @total variable

出力:

這里寫圖片描述

(3)入出力型パラメータ

プロシージャ p9(inout age int) を作成します。
始める
  年齢を := 年齢 +20 に設定します。
終了$

電話:

set @age = 18; --@age変数を18に設定します
call p9(@age); --p9 ストアド プロシージャを呼び出します。@age 変数は実際のパラメーターです。select @age; --@age 変数を表示します。

出力:

這里寫圖片描述

inout 型変数の実際のパラメータも変数名です。この変数は、ストアド プロシージャの入力変数と出力変数の両方として機能します。

13. 格構造の使用

使用:

プロシージャ p10() を作成する
始める
  pos int のデフォルトを 0 と宣言します。
  pos := floor(5*rand()); を設定します。
  ケース pos
  1の場合は「まだ飛行中」を選択します。
  2の場合は「海に落ちる」を選択します。
  3の場合は「陸に落ちる」を選択します。
  それ以外の場合は「場所が分からない」を選択します。
  終了ケース;
終了$

出力:

這里寫圖片描述

14. 繰り返しループ構造

形式:

[begin_label:] 繰り返し
  ステートメントリスト
UNTIL 検索条件
繰り返し終了 [end_label]

要件: 1から100まで追加

プロシージャ p11() を作成する
始める
  合計 int のデフォルトを 0 と宣言します。
  num int のデフォルトを 0 と宣言します。
  r:繰り返し
    合計を合計 + 数値と設定します。
  num:=num + 1 を設定します。
  数値が100を超えるまで
  繰り返し終了 r;
  合計を選択;
終了$

出力:

這里寫圖片描述

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャでの変数の定義と割り当て
  • MySQL ストアド プロシージャ カーソル ループの使用の概要
  • MySQL ストアドプロシージャの使用例の詳細な説明
  • MySQL ストアド プロシージャの例 (トランザクション、出力パラメータ、ネストされた呼び出しを含む)
  • MySql ストアド プロシージャと関数の詳細な説明
  • mysql クエリ データベース ストアド プロシージャと関数ステートメント
  • MySQL のインポートとエクスポート データベース、関数、ストアド プロシージャの紹介
  • 入力および出力パラメータを持つ MySQL ストアド プロシージャの例
  • MySQL ストアド プロシージャで動的 SQL ステートメントを実行する方法
  • MySQL ストアドプロシージャと関数の違い
  • MYSQL ストアドプロシージャと関数の簡単な記述
  • MySQL ストアド プロシージャでカーソル ループを終了して継続する例

<<:  Vueカスケードドロップダウンボックスの設計と実装

>>:  Tomcat 経由で JMX 監視を有効にする方法

推薦する

Python ベースの MySQL レプリケーション ツールの詳細な説明

目次1. はじめに2回目の練習2.1 インストールと設定2.2 コアクラスの紹介2.3 使い方は? ...

ページスピードの最適化の概要

インターネットは人々の生活にますます欠かせないものになってきていると思います。 Ajax や fle...

2048 ゲームを実装するためのネイティブ js

2048ミニゲーム、参考までに具体的な内容は以下のとおりですまず、2048ゲームは16のグリッドか...

MYSQL開発パフォーマンス調査:バッチデータ挿入の最適化方法

1. どのような問題に直面しましたか?標準 SQL では、通常、次の SQL 挿入ステートメントを記...

Linux システムに 3 つ以上の Tomcat をインストールする (詳細な手順)

複数のTomcatをインストールする場合は、システムにJDKがインストールされている必要があり、 T...

MySQL シリーズ 4 SQL 構文

目次チュートリアルシリーズ1. SQL言語の紹介と仕様2. データベース操作1. ライブラリを作成す...

Linux で pyenv をインストールする方法

前提条件gitをインストールする必要があるインストール手順1. リモートリポジトリからpyenvをク...

MySQLのバックアップとリカバリの詳細な説明

序文:前回の記事では、さまざまな MySQL ステートメント構文の使用法とユーザー権限に関する知識を...

CentOS 7.3 で Nginx 仮想ホストを設定する方法

実験環境最小限にインストールされた CentOS 7.3 仮想マシン基本環境を構成する1. ngin...

バッチファイルを処理するLinuxの1行コマンドの詳細な説明

序文最良の方法は、あなたが思いつく最も速い方法ではないかもしれません。職場で一時的に使用するスクリプ...

Vue は QR コード スキャン機能を実装します (スタイル付き)

必要: vue を使用して QR コードのスキャンを実現します。プラグイン: QRコードリーダー;プ...

Win10 DVWA のダウンロード、インストール、構成のグラフィック チュートリアルの詳細な説明 (初心者向け学習侵入)

コンピュータ システムが再インストールされ、侵入テスト学習環境 DVWA を再インストールする必要が...

モバイル適応型ウェブページ効果は、小さな表示ページの問題を解決します

仕事上、携帯電話に適応した Web ページ効果を作成する必要があります。ようやく完成しました。まずは...

Clickhouse Docker クラスターの展開と構成を例を使って説明します

目次前面に書かれた環境の展開Zookeeper クラスタの展開Clickhouse クラスターの展開...

Navicat が MySql サーバーにリモート接続できない問題の解決策

Navicat が MySql サーバーにリモート接続できない問題の解決策は、先頭に書かれています:...