Mysql データベース ストアド プロシージャの基本構文の説明

Mysql データベース ストアド プロシージャの基本構文の説明
プロシージャ sp_name を削除します//

これまで、MYSQL 構文の基礎知識について説明してきました。この記事では、次の例を使用して、実際のコードを通じて読者に基本的な構文知識を説明します。

通常、MYSQL は入力を確定してステートメントを実行するために ; で終わりますが、ストアド プロシージャでは ; は終了を示さないため、このコマンドを使用して ; 記号を // に変更し、入力を確定して実行することができます。ストアド プロシージャはプログラミング言語のようなもので、データ型、フロー制御、入出力、独自の関数ライブラリも含まれます。

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

1. 基本的な構文:

プロシージャ sp_name() を作成します。
始める
.........
終わり

2. パラメータの受け渡し 2. ストアドプロシージャの呼び出し

1. 基本的な構文:

sp_name() を呼び出す

注意: ストアド プロシージャにパラメータがない場合でも、ストアド プロシージャ名の後に括弧を追加する必要があります。

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

1. 基本的な構文:

2. 注記
(1)ストアドプロシージャ内から別のストアドプロシージャを削除することはできません。別のストアドプロシージャを呼び出すことしかできません。4. ブロック、条件、ループ

1. ブロック定義、一般的に使用される

始める
......
終わり;

次のようなブロックのエイリアスを付けることもできます。

ラベル:開始
...........
終了ラベル;

ブロックから抜け出してブロックの後のコードを実行するには、leave label; を使用します。
2. 条件文

条件が
声明
それ以外
声明
終了の場合;

3. ループ文
(1).whileループ

[ラベル:] WHILE式DO

声明

END WHILE [ラベル];

(2)ループ
[レーベル:] ループ

声明

END LOOP [ラベル];
(3)ループするまで繰り返す
[ラベル:] 繰り返し

声明

UNTIL式

END REPEAT [ラベル];
5. その他のよく使われるコマンド

1.手順のステータスを表示する
データベース内のすべてのストアド プロシージャの基本情報 (ストアド プロシージャが属するデータベース、ストアド プロシージャの名前、作成時刻など) を表示します。
2. プロシージャ sp_name の作成を表示します
ストアドプロシージャの詳細情報を表示します。例を見てみましょう。1. MySQLでストアドプロシージャを作成する

「pr_add」は単純な MySQL ストアド プロシージャです。この MySQL ストアド プロシージャには、2 つの int 型入力パラメータ「a」と「b」があり、これら 2 つのパラメータの合計を返します。

区切り文字 // -- 区切り文字を変更する

drop procedure if exists pr_add// -- このストアドプロシージャが以前に作成された場合は削除します

2つの数値の合計を計算する

プロシージャpr_add(a int, b int)を作成します。
始める
c int を宣言します。
aがnullの場合
a = 0 に設定します。
終了の場合;
bがnullの場合
b = 0 に設定します。
終了の場合;
c = a + b と設定します。
合計として c を選択します。
終わり
//

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

pr_add(10, 20) を呼び出します。
MySQL ストアド プロシージャを実行します。ストアド プロシージャ パラメータは MySQL ユーザー変数です。

@a = 10 に設定します。
@b = 20 に設定します。
pr_add(@a, @b) を呼び出します。
3. MySQLストアドプロシージャの特徴

MySQL ストアド プロシージャを作成するための簡単な構文は次のとおりです。

プロシージャストアドプロシージャ名() を作成する

[in|out|inout] パラメータのデータ型

始める
MySQL ステートメント;
終わり;
MySQL ストアド プロシージャ パラメータが明示的に「in」、「out」、または「inout」として指定されていない場合、デフォルトは「in」になります。従来、"in" パラメータを明示的に指定することはありません。

1. パラメータがない場合でも、MySQL ストアド プロシージャ名の後の「()」は必須です。

2. MySQL ストアド プロシージャ パラメータの場合、「@a int」のようにパラメータ名の前に「@」を追加することはできません。ストアド プロシージャを作成するための次の構文は、MySQL では正しくありません (SQL Server では正しいです)。 MySQL ストアド プロシージャの変数名の前には「@」を付ける必要はありませんが、MySQL クライアント ユーザー変数の前には「@」を付ける必要があります。

プロシージャpr_addを作成する

@a int, -- エラー
b int -- 正しい

3. MySQL ストアド プロシージャ パラメータではデフォルト値を指定できません。

4. MySQL ストアド プロシージャでは、プロシージャ本体の前に「as」を追加する必要はありません。 SQL Server ストアド プロシージャには "as" キーワードが必要です。

プロシージャpr_addを作成する
(
整数、
b 整数
)
as -- 間違い。MySQL では「as」は必要ありません。
始める
mysql ステートメント ...;
終わり;

5. MySQL ストアド プロシージャに複数の MySQL ステートメントが含まれている場合は、begin キーワードと end キーワードが必要です。

プロシージャpr_addを作成する
(
整数、
b 整数
)
始める
mysql ステートメント 1 ...;
mysql ステートメント 2 ...;
終わり;

6. MySQLストアドプロシージャの各ステートメントの末尾にセミコロン「;」を追加します。

...
c int を宣言します。
aがnullの場合
a = 0 に設定します。
終了の場合;
...
終わり;

7. MySQL ストアド プロシージャ内のコメント。

declaration c int; -- これは 1 行の MySQL コメントです (-- の後に少なくとも 1 つのスペースが必要であることに注意してください)
a が null の場合 # これも 1 行の MySQL コメントです
a = 0 に設定します。
終了の場合;
...
終わり;
8. MySQL ストアド プロシージャでは「return」キーワードは使用できません。

c = a + b と設定します。
c を合計として選択します。
終わり;
9. MySQL ストアド プロシージャを呼び出すときは、パラメーターがない場合でも、プロシージャ名の後に「()」を追加する必要があります。

pr_no_param() を呼び出します。
10. MySQL ストアド プロシージャ パラメータにはデフォルト値がないため、MySQL ストアド プロシージャを呼び出すときにパラメータを省略することはできません。 null に置き換えることができます。

上記の知識ポイントを深めるために例を使ってみましょう。

1. ストアド プロシージャの定義プロセスは次のとおりです。

プロシージャ proc_name を作成します (パラメータ整数)
始める 
変数varchar(20)を宣言します。
パラメータ=1の場合、変数='MySQL'を設定します。
それ以外の場合は、変数を 'PHP' に設定します。
終わり
もし;
tb (名前) 値 (変数) に挿入します。
終わり;

MySQL でのストアド プロシージャの作成は、キーワード create procedure で始まり、その後にストアド プロシージャの名前とパラメータが続きます。 MySQL ストアド プロシージャ名では大文字と小文字は区別されません。たとえば、PROCE1() と proce1() は同じストアド プロシージャ名を表します。ストアド プロシージャの名前は、MySQL データベースの組み込み関数と同じにすることはできません。

ストアド プロシージャのパラメーターは通常、3 つの部分で構成されます。最初の部分は in、out、または inout になります。 in はパラメータをストアド プロシージャに渡すことを意味し、out はパラメータを外部に渡すことを意味します。inout は、定義されたパラメータをストアド プロシージャに渡すことができ、ストアド プロシージャから渡される前にストアド プロシージャによって変更できることを意味します。ストアド プロシージャはデフォルトでパラメータを渡すため、パラメータ in は省略できます。 2 番目の部分はパラメータ名です。 3 番目の部分はパラメータ タイプで、MySQL データベースで使用可能なすべてのフィールド タイプです。パラメータが複数ある場合は、パラメータをコンマで区切ることができます。

MySQL ストアド プロシージャのステートメント ブロックは begin で始まり、end で終わります。ステートメント本体には、変数宣言、制御ステートメント、SQL クエリ ステートメントなどを含めることができます。ストアド プロシージャ内のステートメントはセミコロンで終了する必要があるため、ストアド プロシージャを定義する前に、ステートメント終了マーク「;」を他の文字に変更する必要があります。また、この文字がストアド プロシージャ内に表示される可能性も低くする必要があります。キーワード delimiter を使用して変更できます。例えば:

mysql>区切り文字 //

ストアド プロシージャを作成した後、次のステートメントを使用して削除できます。ここで、パラメーター proc_name はストアド プロシージャの名前を参照します。

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

実装プロセス

(1)MySQLストアドプロシージャは「コマンドプロンプト」で作成されるため、まず「コマンドプロンプト」ウィンドウを開く必要があります。
(2)「コマンドプロンプト」ウィンドウに入ったら、まずMySQLデータベースサーバーにログインし、「コマンドプロンプト」に次のコマンドを入力します。

mysql –u ユーザー名 –p ユーザーパスワード

(3)文末記号を変更します。この例では文末記号を「//」に変更します。コードは次のとおりです。

区切り文字 //

(4)ストアドプロシージャを作成する前に、まずデータベースを選択する必要があります。コードは次のとおりです。

データベース名を使用する

(5)ストアドプロシージャを作成する。
(6)callステートメントを通じてストアドプロシージャを呼び出します。

類推で学ぶ

使用テスト;
テーブルユーザーを作成(
id mediumint(8) unsigned not null auto_increment,
名前 char(15) nullでないデフォルト ”,
char(32)を渡す null デフォルトではない ”,
メモテキストがnullではありません。
主キー (ID)
)エンジン=Innodb 文字セット=utf8;

例1

区切り文字 //
プロシージャ proc_name を作成します (パラメータ整数内)
始める
パラメータ=0の場合
ユーザーから * を選択し、ID の昇順で並べ替えます。
それ以外
select * from user order by id desc;
終了の場合;
終わり;
//

区切り文字 ;
警告を表示します。
proc_name(1)を呼び出す。
proc_name(0)を呼び出します。

例2

プロシージャ proc_name を削除します。
区切り文字 //
プロシージャ proc_name を作成します (パラメータ整数)
始める
変数varchar(20)を宣言します。
パラメータ=1の場合
変数を 'Windows' に設定します。
それ以外
変数を 'Linux' に設定します。
終了の場合;
パラメータを選択します。
終わり;
//

区切り文字 ;
警告を表示します。
proc_name(1)を呼び出す。
proc_name(0)を呼び出します。

 drop procedure proc_name を削除します。

注:

1.手順のステータスを表示します。
データベース内のすべてのストアド プロシージャの基本情報 (ストアド プロシージャが属するデータベース、ストアド プロシージャの名前、作成時刻など) を表示します。
2. プロシージャ sp_name の作成を表示します
ストアドプロシージャの詳細情報を表示する

上記が、基本的な MYSQL 構文に関するこの記事の内容のすべてです。良いと思ったら、友達と共有してください。

以下もご興味があるかもしれません:
  • MySQLデータベースのストアドプロシージャとトランザクションの違い
  • Mysqlデータベースの保存場所を変更する具体的な手順
  • MySQLデータベースのストレージエンジンとブランチの現状分析
  • Mysqは在庫同時実行問題を解決する方法を詳しく説明しています

<<:  Linux の fsevents モジュールによって発生する npm ls エラーの解決方法の詳細な説明

>>:  Vue での親子コンポーネント通信と、sync を使用して親子コンポーネント データを同期する

推薦する

MySQL の JSON 挿入の問題

MySQL 5.7.8 以降では、JSON テキストでデータを効率的に取得できるネイティブ JSON...

MySQL の大きなテーブルで大量のデータを一括削除する方法

質問はhttps://www.zhihu.com/question/440066129/answer...

リバースプロキシ設定を実装するためのユニバーサルnginxインターフェース

1. プロキシサーバーとは何ですか?プロキシ サーバーは、クライアントが要求を送信すると、それを直接...

Windows 環境での MYSQL5.7 設定ファイルの場所のグラフィカル分析

1. MYSQLインストールディレクトリ次のようにコードをコピーします。 select @@bas...

MySQL8の再帰メソッドの使い方を教える

以前、カスタム関数を使用して MySQL でツリー構造を再帰的にクエリする方法についての記事を書きま...

CSS3 レーダースキャンマップのサンプルコード

CSS3 を使用して、クールなレーダースキャン画像を実現します。 コード上で直接: // インデック...

Jenkins初心者のためのDockerデプロイメントチュートリアルの詳細な説明

この記事では、docker 経由で Jenkins+Maven+SVN+Tomcat をデプロイし、...

MySQLデータベースイベントスケジュール実行タスクの詳細な説明

1. 背景プロジェクトの業務が進むにつれて、データベース テーブルの数がどんどん大きくなり、ハードデ...

Vue コンポーネントはどのように解析され、レンダリングされるのでしょうか?

序文この記事では、Vue コンポーネントがどのように解析され、レンダリングされるかを説明します。 V...

vue3.0プロジェクトアーキテクチャを段階的に構築する方法を教えます

目次序文: 1. vue-cliでプロジェクトを作成する2. ルーターをインストールする3. ディレ...

MySQL レプリケーション テーブルの詳細とサンプル コード

MySQL レプリケーション テーブルの詳細な説明テーブル構造、インデックス、デフォルト値などを含む...

HTML要素のID属性とName属性の違い

今日、私は <a href="#13"></a> につい...

Vue3.0のさまざまなリスニング方法の包括的な概要

目次リスナー1.ウォッチエフェクト2.見る1.1 聴くための最初の方法1.2 聞く2つ目の方法1.3...

JSONオブジェクトのキーを置き換える最良の方法

JSON (JavaScript Object Notation、JS Object Notatio...