mysql で変数を次のように宣言するとします。
declare prev_year int;
set prev_year = 100;
とset @prev_year = 100;
同じですか?
異なる変数のように機能するように見える違いは何ですか?
いいえ、それらは実際には同じではありません...しかし、使用されるコンテキストによっては同じように見える可能性があります。
説明します。MySQLにはセッション変数があります。これらはセッションが終了するまで有効に割り当てる変数です(接続変数を考えてみてください)。これらの変数は@
シンボルで宣言されています。したがって、これら2つのステートメントを実行すると、次のように機能します。
SET @myId := 123;
SELECT * FROM table
WHERE id = @myId;
ストアドプロシージャを作成し、DECLAREを使用する場合、変数はそのプロシージャのスコープ内にあります。
DECLARE myId INT;
SELECT id INTO myId FROM table
WHERE name = 'steve';