MySQL ストアド プロシージャを作成 (CREATE PROCEDURE) して呼び出す (CALL) 方法と、変数を作成 (DECLARE) して割り当てる (SET) 方法

MySQL ストアド プロシージャを作成 (CREATE PROCEDURE) して呼び出す (CALL) 方法と、変数を作成 (DECLARE) して割り当てる (SET) 方法

この記事では、例を使用して、MySQL ストアド プロシージャを作成 (CREATE PROCEDURE) して呼び出す (CALL) 方法と、変数を作成 (DECLARE) して割り当てる (SET) 方法について説明します。ご参考までに、詳細は以下の通りです。

ストアド プロシージャの作成 (CREATE PROCEDURE) と呼び出し (CALL)

ここでは定義や用語については説明しません。例を見てゆっくりと慣れていきましょう。ここで、GetAllProducts() という簡単なストアド プロシージャを作成しましょう。この GetAllProducts() ストアド プロシージャは、主に製品テーブルからすべての製品を選択するために使用されます。 mysql クライアント ツールを起動し、次のコマンドを入力します。

区切り文字 //
 プロシージャ GetAllProducts() を作成する
  始める
  製品から*を選択します。
  終わり //
区切り文字 ;

上記の SQL を詳しく見てみましょう。

  • 最初のコマンドは DELIMITER // ですが、これはストアド プロシージャの構文とは関係ありません。 DELIMITER ステートメントは、標準の区切り文字であるセミコロン (;) を :// に変更します。 この場合、区切り文字はセミコロン (;) から二重スラッシュ // に変更されます。なぜ区切り文字を変更する必要があるのですか? mysql ツールに各ステートメントを 1 つずつ解釈させるのではなく、ストアド プロシージャ全体をサーバーに渡すためです。 END キーワードの後に​​、区切り文字 // を使用してストアド プロシージャの終了を示します。 最後のコマンド (DELIMITER;) は、区切り文字をセミコロン (;) に戻します。
  • 新しいストアド プロシージャを作成するには、CREATE PROCEDURE ステートメントを使用します。 CREATE PROCEDURE ステートメントの後にストアド プロシージャの名前を指定します。この例では、ストアド プロシージャの名前は GetAllProducts であり、ストアド プロシージャの名前の後に括弧が配置されています。
  • BEGIN と END の間の部分は、ストアド プロシージャの本体と呼ばれます。ビジネス ロジックを処理するには、宣言型 SQL ステートメントを本体に配置します。 このストアド プロシージャでは、単純な選択クエリを使用して、製品テーブル内のデータを照会します。

上記の SQL により、ストアド プロシージャが作成されました。完了したら、ストアド プロシージャを呼び出します。呼び出し構文を見てみましょう。

STORED_PROCEDURE_NAME() を呼び出します。

GetAllProducts() ストアド プロシージャを呼び出す特定の SQL を見てみましょう。

GetAllProducts() を呼び出します。

上記の SQL を実行すると、ストアド プロシージャで SQL を実行した結果が表示されます。

変数の作成 (DECLARE) と代入 (SET)

ご存知のとおり、変数は、ストアド プロシージャの実行中に値を変更できる名前付きデータ オブジェクトです。次に、ストアド プロシージャで変数を使用して、直接的/間接的な結果を保存してみます。 これらの変数はストアド プロシージャのローカル変数ですが、変数を使用する前に宣言する必要があることに注意する必要があります。ストアド プロシージャで変数を宣言する場合は、DECLARE ステートメントを使用できます。SQL 構文を見てみましょう。

DECLARE 変数名 データ型(サイズ) DEFAULT デフォルト値;

上記の SQL の意味を見てみましょう。

  • まず、DECLARE キーワードの後に​​変数名を指定します。変数名は、MySQL テーブル列名の命名規則に従う必要があります。
  • 次に、変数のデータ型とサイズを指定します。変数は、INT、VARCHAR、DATETIME などの任意の mysql データ型にすることができます。
  • 最後に、変数が宣言されると、その初期値は NULL になります。ただし、DEFAULT キーワードを使用して変数にデフォルト値を割り当てることができます。

次に、データ型が INT、デフォルト値が 0 の total_sale という変数を宣言します。 SQLを見てみましょう:

total_sale INT DEFAULT 0 を宣言します。

その中でも、MySQL では、単一の DECLARE ステートメントを使用して、同じデータ型を共有する 2 つ以上の変数を宣言できます。SQL を見てみましょう。

x, y INT をデフォルト 0 として宣言します。

上記のSQLでは、2つの整数変数xとyを宣言し、デフォルト値を0に設定しました。変数が設定されたら、値を割り当てます。変数に値を割り当てる場合は、SET ステートメントを使用できます。例を見てみましょう。

total_count INT DEFAULT 0 を宣言します。
合計数を 10 に設定します。

上記の SQL ステートメントでは、total_count 変数に値 10 を割り当てます。 SET ステートメントに加えて、SELECT INTO ステートメントを使用してクエリの結果を変数に割り当てることもできます。例を見てみましょう。

total_products INT DEFAULT 0 を宣言する
 
COUNT(*) を total_products に選択します
製品から

上記の SQL では、次のことを理解する必要があります。

  • まず、total_products という変数を宣言し、その値を 0 に初期化します。
  • 次に、SELECT INTO ステートメントを使用して、データベースの products テーブルから製品の数を選択し、total_products 変数に値を割り当てます。

変数には独自のスコープがあり、それを使用して変数のライフサイクルを定義することがわかっています。 ただし、ストアド プロシージャ内で変数を宣言すると、ストアド プロシージャの END ステートメントに到達したときに変数はスコープ外となり、他のコード ブロックではアクセスできなくなります。

BEGIN END ブロック内で変数を宣言すると、END に到達するとスコープ外になることがわかります。 変数は自身のスコープ内でのみ有効であるため、異なるスコープ内で同じ名前を持つ 2 つ以上の変数を宣言することもできます。 ただし、異なるスコープ内で同じ名前の変数を宣言することは、適切なプログラミング方法ではありません。このうち、@ 記号で始まる変数はセッション変数であり、セッションが終了するまで使用可能でアクセス可能です。

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

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

以下もご興味があるかもしれません:
  • MySQL で 2 つの日付間の連続ログイン日数の最大数を照会する方法
  • MySQL ストアド プロシージャでの変数の定義と割り当て
  • mysqlは連続した日付と変数の割り当てを生成します

<<:  Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策

>>:  jsはショッピングカートの加算と減算、価格計算を実装します

推薦する

クリック範囲を拡大する入力チェックボックスを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー< div style = &quo...

MySQL の一般的な問題とアプリケーション スキルの概要

序文MySQL の日常的な開発やメンテナンスでは、パスワードの紛失やテーブルの破損など、避けられない...

カルーセル効果を書くためのjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

Docker イメージのダウンロードが遅すぎる場合の解決策

Docker イメージのダウンロードが停止したり、遅すぎたりするネットでいろいろな方法を検索しました...

MySQL 永続統計の詳細な説明

1. 永続的な統計情報の重要性:統計は、MySQL が実行プランを生成するためのガイドとして使用され...

Linux に mysql をインストールするときに /etc に my.cnf ファイルがない問題を解決する

今日、mysql ポートを変更したいと思ったのですが、/etc/ ディレクトリに my.cnf ファ...

JSでHTML本文のスタイルを変更する

目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...

MySQL トリガーの使用方法と利点と欠点の紹介

目次序文1. トリガーの概要2. トリガーの作成2.1 トリガー構文の作成2.2 コード例3. トリ...

Vueのライフサイクルについて詳しく説明します

目次序文1. Vue2 のライフサイクルインスタンスのライフサイクルその他のライフサイクルフック2....

コマンドを使用してMySQLデータベース(de1)を作成する方法

1. MYSQLに接続するフォーマット: mysql -h ホストアドレス -u ユーザー名 -p ...

Vue のレスポンシブ原則と双方向データの詳細な分析

応答性を実現するための object.defineProperty の理解observe/watch...

VMware 仮想マシンの NAT モードを構成する方法

この記事では、VMware仮想マシンのNAT構成プロセスを詳しく説明します。具体的な内容は次のとおり...

要素の$notifyポイントについての簡単な説明

当初の意図は、element-ui の $notify 通知をコンポーネントにカプセル化することでし...

MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ

目次1つのマスターと複数のスレーブのレプリケーションアーキテクチャマルチレベルレプリケーションアーキ...