MySQLチュートリアルではストアドプロシージャを徹底的に理解します

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

ここに画像の説明を挿入

1. ストアドプロシージャに関連する概念

ストアド プロシージャとは何ですか?
Java のメソッドや Python の関数に似ています。

ストアド プロシージャを使用する利点:
1. コードの再利用性を向上させる。
2. 操作を簡素化します。
3. コンパイル回数とデータベースサーバーへの接続回数が削減され、効率が向上します。注: 通常、SQL ステートメントが実行されるたびに、MySQL サーバーに 1 回接続されます。

ストアド プロシージャの意味:
プリコンパイルされた SQL ステートメントのコレクション。

2. ストアドプロシージャの使用

1) ストアドプロシージャを作成するための構文

プロシージャストアドプロシージャ名の作成 (パラメータリスト)
始める
     ストアド プロシージャ本体 (合法かつ有効な SQL ステートメントのセット)
終わり

2) 創造構文の理解

①パラメータリスト:パラメータリストは3つの部分から構成されます

パラメータモード パラメータ名 パラメータタイプ 例: in stuname varchar(20)

②パラメータモード分類

in: このパラメータは入力として使用できます。つまり、呼び出し元はこのパラメータの値を渡す必要があります。

out: このパラメータは出力として使用できます。つまり、このパラメータは戻り値として使用できます。

inout: このパラメータは入力と出力の両方として使用できます。つまり、パラメータは値を渡す必要があり、値を返すことができます。

③ ストアドプロシージャ本体が1文のみで構成される場合は、begin/endは省略できます。

Ⅰ ストアド プロシージャ本体の各 SQL ステートメントの末尾にはセミコロンが必要です。
Ⅱ ストアド プロシージャの終了は区切り文字を使用してリセットできます。そうでない場合、「;」を使用すると混乱が生じます。
構文: 区切り文字終了マーカー たとえば、区切り文字 $ -- は、$ が終了記号として使用されることを意味します。

④ ストアドプロシージャの呼び出し構文

ストアド プロシージャ名 (実際のパラメーター リスト) を呼び出します。

3. 空のパラメータの保存手順

「ストアド プロシージャの実行プロセス全体は、CMD ウィンドウで実行するのが最適です」
-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ myp() を作成する
始める
    	admin(ユーザー名、`パスワード`) に挿入します
    	値("トム"、"1111")、("ジェリー"、"2222")、
    	("ジャレン","3333"),("ローズ","4444"),("トニー","5555");
終了$
-- ストアドプロシージャ call myp()$ を呼び出します。
-- 結果を表示します。
admin$から*を選択

結果は次のとおりです。

ここに画像の説明を挿入

4. in モードのストアド プロシージャ

ここに画像の説明を挿入

1) ケース: 部門番号に基づいて対応する部門名を照会するストアド プロシージャを作成します。

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ myp2(in num int) を作成します。
始める
    e.ename、d.dname を選択
    emp eから 
    e.deptno=d.deptno の dept d を左結合します
    ここで、e.deptno=num;
終了$
-- ストアドプロシージャ call myp2(10)$ を呼び出す

結果は次のとおりです。

ここに画像の説明を挿入

2) ケース: ユーザーが正常にログインしたかどうかを確認するストアド プロシージャを作成します。

ここに画像の説明を挿入

操作は以下のとおりです。

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ myp3 を作成します(ユーザー名 varchar(10)、パスワード varchar(10))
始める 
    結果を int として宣言します。
    count(*) を結果に選択します
    管理者広告より
    ad.username=ユーザー名
    および ad.password=password;
    select if(count(*) > 0,"ログイン成功","ログイン失敗") login status;
終了$
-- ストアド プロシージャを呼び出します。call myp3('john','8888');

結果は次のとおりです。

ここに画像の説明を挿入

5. 出力モードのストアドプロシージャ

ここに画像の説明を挿入

1) ケース1: 女神の名前に応じて対応する男性神の名前を返すストアドプロシージャを作成する

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ myp4(in beautyName varchar(20),out boyName varchar(20)) を作成します。
始める 
    b.boyName を boyName に選択します
    美しさから左の男の子に加わるb
    beauty.boyfriend_id=b.id で
    ここで、beauty.name=beautyName;
終了$
-- 戻り値 boyName を受け取るために、変数 @boyname を #Redefine します。
myp4("Zhao Min",@boyname)$ を呼び出す
@boyname$ を選択

myp4("刘岩",@boyname)$ を呼び出す
@boyname$ を選択

結果は次のとおりです。

ここに画像の説明を挿入

2) ケース2: 女神の名前に応じて対応する男性神の名前と男性神の魅力の値を返すストアドプロシージャを作成する

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ myp5(in beautyName varchar(20), out boyName varchar(20), out userCP int) を作成します。
始める 
    b.boyName、b.userCP を boyName、userCP に選択します。
    美しさから左の男の子に加わるb
    beauty.boyfriend_id=b.id で
    ここで、beauty.name=beautyName;
終了$
-- 戻り値 boyName を受け取るために、変数 @boyname を #Redefine します。
myp5("赵敏",@boyname,@usercp)$ を呼び出す
@boyname、@usercp$ を選択

myp5("刘岩",@boyname,@usercp)$ を呼び出す
@boyname、@usercp$ を選択

結果は次のとおりです。

ここに画像の説明を挿入

6. inout モードのストアド プロシージャ

1) ケース 1: 2 つの値 a と b を渡し、最終的に a と b の両方が 2 倍になって返されます。

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ myp6(inout a int ,inout b int) を作成します。
始める 
    -- ローカル変数は @ 記号で囲む必要はありません。
    a=a*2 と設定します。
		b=b*2 と設定します。
終了$
-- 呼び出し -- 呼び出し部分に特に注意してください。
@m=10$ に設定
@n=20$ に設定
myp6(@m,@n)$ を呼び出す
@m,@n$ を選択

結果は次のとおりです。

ここに画像の説明を挿入

7. ストアドプロシージャのケース分析

1) ユーザー名とパスワードを渡し、管理テーブルに挿入するストアド プロシージャまたは関数を作成します。

2) 女神番号を渡し、女神の名前と女神の電話番号を返すストアド プロシージャまたは関数を作成します。

3) 2 人の女神の誕生日を渡し、そのサイズを返すストアド プロシージャまたは関数を作成します。

1) ユーザー名とパスワードを渡し、管理テーブルに挿入するストアド プロシージャまたは関数を作成します。

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ pro1 を作成します (ユーザー名 varchar(20)、userpwd varchar(20))
始める 
    admin(ユーザー名、`パスワード`) に挿入します
    値(ユーザー名、ユーザーパスワード);
終了$

-- ストアド プロシージャ call pro1("Lu Zhishen","123abc")$ を呼び出します。
admin$から*を選択

結果は次のとおりです。

ここに画像の説明を挿入

2) 女神番号を渡し、女神の名前と女神の電話番号を返すストアド プロシージャまたは関数を作成します。

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ pro2(in id int,out beautyName varchar(20),out beautyPhone varchar(20)) を作成します。
始める
    beauty.name、beauty.phone を beautyName、beautyPhone に選択します。
    美しさから
    ここで beauty.id=id;
終了$

-- ストアド プロシージャ call pro2(2,@beautyname,@beautyphone)$ を呼び出します。
@beautyname、@beautyphone$ を選択

pro2(3,@beautyname,@beautyphone)$ に電話する
@beautyname、@beautyphone$ を選択

結果は次のとおりです。

ここに画像の説明を挿入

3) 2 人の女神の誕生日を渡し、そのサイズを返すストアド プロシージャまたは関数を作成します。

-- ストアドプロシージャ区切り文字 $ を作成する
プロシージャ pro3(in borndate1 datetime,in borndate2 datetime,out result int) を作成します。
始める
    結果に datediff(borndate1,borndate2) を選択します。
終了$

-- ストアド プロシージャを呼び出します call pro3("1993-8-12",now(),@result)$
@結果$を選択

結果は次のとおりです。

ここに画像の説明を挿入

8. ストアドプロシージャの削除

プロシージャのストアド プロシージャ名を削除します。

9. ストアドプロシージャの情報を表示する

ここに画像の説明を挿入

10.ストアドプロシージャケースの評価

1) 女神の名前を渡し、女神 AND 男性の神という形式の文字列を返すストアドプロシージャまたは関数を作成します。
輸入の場合:小趙
復帰:シャオ・ジャオとチャン・ウージー
2) 渡されたエントリ数と開始インデックスに基づいて、beauty テーブルのレコードを照会するストアド プロシージャまたは関数を作成します。

1) 女神の名前を渡し、女神 AND 神 の形式で文字列を返すストアド プロシージャまたは関数を作成します。

区切り文字 $
プロシージャ test1(beautyname varchar(20) 内) を作成します。
始める
    concat(beauty.name,"AND",boys.boyName) を選択します
    美しさから左の男の子に参加
    beauty.boyfriend_id=boys.id で
    ここで、beauty.name=beautyname;
終了$

test1("Liu Yan")$ を呼び出す
test1("Zhao Min")$ を呼び出す

結果は次のとおりです。

ここに画像の説明を挿入

2) 渡されたエントリ数と開始インデックスに基づいて、beauty テーブルのレコードを照会するストアド プロシージャまたは関数を作成します。

区切り文字 $
プロシージャ test2(開始インデックス int、長さ int) を作成します。
始める
    *を選択
    美しさから
    開始インデックス、長さを制限します。
終了$
-- 1ページあたり3件のレコードを表示 -- ページ2を表示 test2(3,3)$ を呼び出す
-- ページ3を表示する test2(6,3)$ を呼び出す

結果は次のとおりです。

ここに画像の説明を挿入

以上が、ストアドプロシージャを徹底的に理解するMySQLシリーズの詳しい内容です。MySQLストアドプロシージャについてさらに詳しく知りたい方は、123WORDPRESS.COMの関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • MySQLストアドプロシージャの詳細な説明
  • MySQL ストアド プロシージャの概念、原則、一般的な使用法の詳細な説明
  • MySql ストアド プロシージャと関数の詳細な説明
  • MySQL ストアドプロシージャと関数の理解

<<:  CSS セレクターの重みの理解(個人テスト)

>>:  HTML CSS を使用して div またはテーブルを指定した位置に固定する方法

推薦する

Docker を使用した Redis マスタースレーブレプリケーションの実践の詳細説明

目次1. 背景2. 操作手順3. Dockerをインストールする4. 主なサービス構成5. サービス...

Vue Element-ui はツリーコントロールノードを実装し、アイコンを追加します。詳細な説明

目次1. レンダリング2. データをバインドし、ツリーテーブルにラベルを追加する3. すべてのコード...

js を使用して年カルーセル選択効果をネイティブに実装する例

序文js を使用して、年の回転選択効果を実現します。では早速、写真を見てみましょう。 1. アイデア...

Linux でのデータベースのスケジュールバックアップの実装スクリプト

目次シナリオ: サーバーデータベースを毎日定期的にバックアップする必要がある1. まずバックアップス...

W3Cチュートリアル(16):その他のW3Cの活動

このセクションでは、その他の重要かつ興味深い W3C アクティビティの概要を説明します。このセクショ...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

HTTPS の原則の説明

HTTPS ウェブサイトの構築コストが下がるにつれて、ほとんどのウェブサイトが HTTPS プロトコ...

Ubuntu 15.04 は MySQL リモート ポート 3306 を開きます

Ubuntu 15.04 は MySQL リモート ポート 3306 を開きます。以下の操作はすべて...

MySQL の完全なデータベース バックアップ データを使用して単一のテーブル データを復元する方法

序文データベースをバックアップするときは、データベース全体のバックアップを使用します。ただし、何らか...

Mysqlマスタースレーブ同期の実装原理

1. MySQL マスター/スレーブ同期とは何ですか?マスター データベースのデータが変更されると、...

XHTML 特殊文字コレクション

注意&#160;ノーブレークスペース = ノーブレークスペース、 iexcl ¡ &...

ローカル フォルダー内の画像を読み込んで表示するための HTML サンプル コード

一つの目的Html ページでローカル フォルダーを選択すると、フォルダーとそのサブフォルダー内のすべ...

シンプルなカルーセル効果を実現するJavaScript

カルーセルとは何ですか?カルーセル: モジュールまたはウィンドウで、コンピューターでマウスをクリック...

Linux C バックグラウンドサービスプログラムの単一プロセス制御の実装

導入通常、バックグラウンド サーバー プログラムには 1 つのプロセスのみが必要ですが、単一のプロセ...

Linux deb パッケージの解凍、変更、その他の操作方法のコード例

さまざまな理由により、debパッケージ内のさまざまなファイルの内容を直接変更する必要がある場合があり...