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はショッピングカートの加算と減算、価格計算を実装します

推薦する

WeChatミニプログラムQRコード生成ツール weapp-qrcode 詳細説明

WeChat ミニプログラム - QR コード ジェネレーターダウンロード: weapp-qrcod...

Linuxプロセス監視と自動再起動の簡単な実装方法

目的: Linux では、さまざまな理由でサーバー プログラムがダンプされ、ユーザーの使用に影響する...

バックエンドから返される 100,000 個のデータをフロントエンドでより適切に表示するにはどうすればよいですか?

目次予備作業バックエンド構築フロントエンドページダイレクトレンダリングsetTimeout ページン...

HTMLウェブページテーブル構造化マークアップの応用に関する簡単な説明

Web テーブルの構造マークアップについて説明する前に、いくつかの画像を見てみましょう。 HTML ...

TypeScript 学習ノート: 型の絞り込み

目次序文型推論真理値の絞り込み平等の縮小演算子の絞り込みインスタンスの絞り込み狭まりの本質ユニオン型...

テーブルリストを破棄するには、標準のdl、dt、ddタグを使用します。

現在、ますます多くのフロントエンド開発者が、元のテーブル レイアウトを xHTML + CSS に置...

ウェブデザインと制作の一般的な原則をまとめる

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

MySql 5.7.17 winx64 のインストールと設定に関する詳細なチュートリアル

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...

MySQLデータベースのマスタースレーブ同期構成と読み取り書き込み分離

MySQL マスター スレーブ レプリケーションを使用する利点は次のとおりです。 1. 安定性を向上...

Mac での MySQL と Squel Pro の設定

Node.js の人気に応えて、最近、いくつかのサーバー側機能を実装するために Node.js を使...

Dockerは元のタグのイメージの再タグ付けと削除を実装します

docker イメージ ID は一意であり、イメージを物理的に識別できます。repository: ...

共通要素のデフォルトのマージンとパディング値に関する議論

今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...

CSSを使用してファイルアップロードパターンを描画する

以下に示すように、あなたならどのようにそれを達成しますか: 通常、フォントアイコンを使用して中央にプ...

CSSスタイルシートとフォーマットレイアウトの詳細な説明

スタイルシートCSS (カスケーディング スタイル シート) は、HTML Web ページを美しくす...

VUEトークンの無効化プロセスの詳細な説明

目次ターゲット思考分析コード着陸要約するターゲットトークンの有効期限切れシナリオの処理トークンは、ユ...