mysql ストアド プロシージャにはどのような変数タイプがありますか?

WBOY
リリース: 2022-05-16 10:30:19
オリジナル
4536 人が閲覧しました

mysql ストアド プロシージャの変数タイプ: 1. ローカル変数、定義構文は「DECLARE 変数名のデータ型」です; 2. ユーザー変数、定義構文は「set @variable name:=...」です。 ; 3 、システム変数。グローバル変数「@@global」とセッション変数「@@session」に分けられます。

mysql ストアド プロシージャにはどのような変数タイプがありますか?

このチュートリアルの動作環境: Windows10 システム、mysql8.0.22 バージョン、Dell G3 コンピューター。

mysql ストアド プロシージャの変数タイプとは何ですか?

MySQL ストアド プロシージャの一般的な変数: ローカル変数、ユーザー変数、システム変数

1 . ローカル変数

プロセス本体で、一部の値を一時的に保存するローカル変数を宣言できます。

1. ローカル変数を定義するための構文:

DECLARE  var_name[, var_name] ...  type [DEFAULT value];
ログイン後にコピー

このうち、type は、int、float、date、varchar(length)

## などの MySQL のデータ型です。 #Note:

①DECLARE はローカル変数の宣言に使用され、DECLARE は BEGIN ... END 複合ステートメントでのみ使用され、複合ステートメントの先頭、他のステートメントの前になければなりません。同じ名前の変数を宣言するブロックを除き、ネストされたブロックで使用されます。

② 変数にデフォルト値を指定する場合は、DEFAULT 句を使用します (値は定数または式として指定できます)。DEFAULT 句がない場合、初期値は NULL です。

2. 基本形式:

CREATE PROCEDURE sp_name ([proc_parameter[,...]])
BEGIN
DECLARE var_name1 type [DEFAULT value];
DECLARE var_name2 type [DEFAULT value];
DECLARE……;
[characteristic ...];
ログイン後にコピー

例 1: プロセスを作成し、ローカル変数のデフォルト値を指定して、プロセスを呼び出します

mysql>delimiter $$
mysql> create procedure test1(out num1 int)->begin-> declare num2 int default 100;-> set num1=num2;->end->$$
mysql>delimiter ;
mysql>call test1(@num);
mysql> select@num;+------+
| @num |
+------+
| 100 |
+------+
ログイン後にコピー

分析:

test1 ストアド プロシージャを作成します: 出力は num1 変数の値です。ローカル変数 num2 を int 型であるように宣言し、デフォルト値は 100 です。set を使用して num2 の値を割り当てます (処理されない場合、デフォルト値) to num1;

Call test1: ユーザー変数 num を使用して、ストアド プロシージャの出力値 num1 を受け取ります...

リテラル値に加えて、デフォルト値も使用できます。スカラー サブクエリを含む複雑な式である必要があります。

例 2: すべてのプレーヤーの数を使用して変数を初期化する作成プロセス

mysql>delimiter $$
mysql> create procedure test2(out num1 int)->begin-> declare num2 int default(select count(*) fromPLAYERS);-> set num1=num2;->end$$mysql>delimiter ;
mysql>call test2(@num);mysql> select@num;+------+
| @num |
+------+
| 14 |
+------+
ログイン後にコピー

注: MySQL はローカル変数として配列をサポートしません。

3. ローカル変数のスコープ:

つまり、変数がエラーなく正常に使用できるプログラム ブロックのスコープです。

ネストされたブロックの場合、

外側のブロックで宣言された変数は内側のブロックで直接使用できます;

内側のブロックで宣言された変数は内部でのみ使用できますブロック。

mysql ストアド プロシージャにはどのような変数タイプがありますか?

分析: 変数 v2 は内部ブロック b2 でのみ使用できます。set ステートメントとブロック b3 の最後の set ステートメントが間違っています。

2. ユーザー変数

>ユーザー変数はデータベース接続に関連しています: 現在の接続で宣言された変数は、接続が切断されると消えます; で宣言された変数この接続を別の接続で使用することはできません。

>@ 記号はユーザー変数を表します。

1. ユーザー変数の定義 (set、select):

1) set ステートメントはユーザー変数に値を割り当てます:

「=」または「代入文字として「:=」;

各変数に代入される expr は、整数、実数、文字列、または NULL 値にすることができます;

mysql> set @zjc:=999;
mysql> select@zjc;+------+
| @zjc |
+------+
| 999 |
+------+
ログイン後にコピー

2) select ステートメントは、値をユーザー変数:

= は非 SET ステートメントの比較演算子とみなされているため、割り当て演算子は「=」ではなく「:=」である必要があります;

mysql> select @abc:=123;+-----------+
| @abc:=123 |
+-----------+
| 123 |
+-----------+mysql> select@abc;+------+
| @abc |
+------+
| 123 |
+------+
ログイン後にコピー

注:

① ユーザー変数はどこでも使用可能 定義されていればどこでも使用でき、定義されていない場合は直接使用できます (値のデフォルトは null)。

②ユーザー変数の変数名の形式: @var_name に @ 記号を付けます。

③ユーザー変数を乱用すると、プログラムの理解と管理が困難になります。

拡張変数の割り当て: set 構文

MySQL の変数はデータ型を厳密に制限しません。変数のデータ型は、変数に割り当てられた値に応じていつでも変わります。

SET variable_assignment [, variable_assignment] ...
variable_assignment:
user_var_name=expr|[GLOBAL | SESSION] system_var_name =expr|[@@global. | @@session. | @@] system_var_name = expr
ログイン後にコピー
## は、ユーザー変数、システム変数に値を割り当てるために使用されます。また、プロセス内のローカル変数に値を割り当てることもできます。

注:

システム変数を設定する場合、スコープの変更はなく、デフォルトはセッション スコープを参照します;

(特別な注意、一部のシステム変数には、スコープの変更は設定できないため、スコープを使用してシステム変数を設定することをお勧めします)。

2. ユーザー変数のスコープ

現在の接続で定義されているユーザー変数が現在の接続で使用されている限りは問題ありませんが、それ以外は問題ありません。

3. ローカル変数との違い:

ローカル変数には変数名のみがあり、@ 記号はありません; ユーザー変数名の前に @ 記号が付きます。

これらは最初に定義されてから使用されます。未定義の変数の場合、選択値は空です。

ローカル変数はストアド プロシージャ内でのみ使用され、プロセス外では意味がありません。begin-end ブロックが処理されるとローカル変数は消えますが、ユーザー変数はストアド プロシージャの内部と外部で使用できます。

ヒント: ストアド プロシージャ内では、ユーザー変数の代わりにローカル変数を使用します。

3. MySQL 変数のユーザー変数とシステム変数

1. ユーザー変数は上記の通り@var_name (@ 記号)

①ユーザー変数はデータベース接続に関連しています。変数は接続後に宣言され、接続が切断されると自動的に消えます。

②割り当てなしでユーザー変数を選択し、NULL (値なし) を返します。

Mysql 変数は動的言語に似ており、変数の値は割り当てられる値のタイプに応じて変化します。

2. システム変数: システム変数はスコープに応じて、グローバル変数とセッション変数 (@ 記号 2 つ) に分けられます

①グローバル変数 (@@global.)

MySQL が起動すると、サーバーはグローバル変数をデフォルト値に自動的に初期化します;

グローバル変数のデフォルト値は、MySQL 構成ファイル (my.ini、my.cnf) を変更することで変更できます。 )。

②セッション変数 (@@session.)

新しい接続が確立されるたびに、MySQL によって初期化されます;

MYSQL は現在のすべてのグローバル変数を保存します 値をコピーしますセッション変数として(つまり、セッションの確立後にセッション変数とグローバル変数の値が手動で変更されない場合、これらすべての変数の値は同じになります)。

#グローバル変数とセッション変数の違い: グローバル変数への変更はサーバー全体に影響しますが、セッション変数への変更は現在のセッションにのみ影響します。

推奨学習: mysql ビデオ チュートリアル

以上がmysql ストアド プロシージャにはどのような変数タイプがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!