[解決済み] MySQLのことです。変数 vs. 変数。その違いは何ですか?
2022-03-19 06:39:32
質問
別の質問で、ある人が「この違いは何ですか?
@variable
とします。
variable
をMySQLに追加しました。また、MSSQLにはバッチスコープがあり、MySQLにはセッションスコープがあることを述べています。どなたか詳しく説明していただけませんか?
どのように解決するのですか?
MySQLには ユーザー定義変数 .
これらは、セッションのどこかで初期化され、セッションが終了するまでその値を保持する、緩やかな型付けの変数です。
の前に
@
のような記号があります。
@var
この変数を初期化するには
SET
ステートメントやクエリ内で使用することができます。
SET @var = 1
SELECT @var2 := 2
MySQLでストアドプロシージャを開発する場合、入力パラメータを渡し、ローカル変数を宣言することができます。
DELIMITER //
CREATE PROCEDURE prc_test (var INT)
BEGIN
DECLARE var2 INT;
SET var2 = 1;
SELECT var2;
END;
//
DELIMITER ;
これらの変数には接頭辞は付かない。
プロシージャ変数とセッション固有のユーザー定義変数の違いは、プロシージャ変数が再初期化されると
NULL
セッション固有の変数がそうでないのに対して、プロシージャが呼び出されるたびに、セッション固有の変数が呼び出されます。
CREATE PROCEDURE prc_test ()
BEGIN
DECLARE var2 INT DEFAULT 1;
SET var2 = var2 + 1;
SET @var2 = @var2 + 1;
SELECT var2, @var2;
END;
SET @var2 = 1;
CALL prc_test();
var2 @var2
--- ---
2 2
CALL prc_test();
var2 @var2
--- ---
2 3
CALL prc_test();
var2 @var2
--- ---
2 4
ご覧の通りです。
var2
(プロシージャ変数) はプロシージャが呼び出されるたびに再初期化されるのに対し
@var2
(セッション固有変数)には適用されません。
(ユーザー定義変数に加え、MySQLの
また
には定義済みのシステム変数があり、以下のようなグローバル変数があります。
@@global.port
または以下のようなセッション変数があります。
@@session.sql_mode
これらのquot;セッション変数"は、セッション固有のユーザー定義変数とは無関係です)。
関連
-
mysqlにおけるvarcharの日付比較とソートの実装
-
CMakeエラー。ソースディレクトリ "/xxx/mysql-5.6.21" に CMakeLists.txt がないようです。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] "お知らせ 未定義変数"、"Notice: Notice: 未定義のインデックス", "Notice:未定義のインデックス", "Notice."。PHPを使用した「未定義のオフセット
-
[解決済み] ずっとUTF-8
-
[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
[解決済み] datetimeの挿入時に文字列から日付や時刻を変換すると、変換に失敗する
-
[解決済み] 親の行を削除または更新できない:外部キー制約が失敗する
-
[解決済み] ユニークなテーブル/エイリアスではない
-
[解決済み】SQLサーバーのテンポラリーテーブルで「すでに名前のついたオブジェクトがあります」エラーが発生する。
-
mysql がエラーを報告します。不明な文字セットです。'utf8mb4'
-
Mysqlの使用中に発生したエラーの一部
-
[解決済み] Ubuntu linux上で動作するリモートMySQLサーバーを再起動する方法は?
-
[解決済み] SQLを使用してSUMとSUBTRACTを行うには?
-
[解決済み] MySQLで最終更新行のIDを取得する方法は?