この記事では、MySQL の変数とは何かについて説明します。使い方?困っている友人は参考にしていただければ幸いです。
MySQL の変数は、ローカル変数、ユーザー変数、セッション変数、グローバル変数の 4 種類に分類されます。ローカル変数は関数とストアド プロシージャ内にのみ存在します。ここでは詳しく知りません。このうちセッション変数とグローバル変数を総称してMySQLではシステム変数と呼びます。
ユーザー変数
基本
名前が示すように、これらはユーザー定義変数です。変数を定義するにはどうすればよいですか?メソッドは 2 つあります。
SET メソッド
# 两种方式都可以 SET @variable = expr SET @variable := expr
SELECT メソッド
# 必须 := SELECT @variable := expr
ユーザー変数定義の備考:
未定義変数 初期値値は null
(変数を定義せずに直接使用でき、エラーは報告されません)
変数名は大文字と小文字が区別されません
select
の limit
ステートメントなど、リテラル値が必要な場所では変数を使用できません。
ユーザー変数を呼び出す式の評価順序は、実際には未定義です。たとえば、SELECT @a = 0、@a := @a 1;
、両方の列が0になる。
ユーザー変数に値を割り当てる場合、式の値が最初に決定されます。理解方法は、次のコードを見てください。
SET @m = 0; SET @m = 3, @n = @m; SELECT @n; # 0
ユーザー変数の型は動的に変更できますが、引き継ぎ時に生命の危険にさらされる可能性があるため、お勧めできません。コード:p 。
変数として、ユーザー変数はすべてセッション全体に対して有効です。つまり、セッション全体に対して有効です。これは問題ないようですが、接続プールが使用されており、カスタム ユーザー変数が正しく初期化されていない場合、予期しない問題が発生する可能性があることに注意してください。実際には破棄されていないため、最後の結果が記録されます。
シリアル番号関数を実装する簡単な例を見てみましょう。テーブルとデータは次のとおりです。
CREATE TABLE employee ( id int primary key, salary int not null ); INSERT INTO employee VALUES(1, 100); INSERT INTO employee VALUES(2, 200); INSERT INTO employee VALUES(3, 300);
これまでに学んだことに基づいて、次のことができます。次の SQL が出力されます:
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r;
問題はありません。すべてが期待どおりです。次に、WHERE 条件を追加して試します:
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r WHERE @rowno = 0;
理論的には、これはデータを返さないはずです。ただし、ID 1 のデータも返します。 ###なぜ? WHERE 条件で使用される @rowno は常に同じ値 0 であり、SELECT で変更されるためリアルタイムには応答しません。
WHERE の機能を実現するには、次のように書き換える必要があります。
SELECT salary, rowno FROM ( SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r ) m WHERE rowno = 2;
set session var_name = value; set @@session.var_name = value; set var_name = value;
show session variables; # 以上代码会把所有会话变量罗列出来,可通过 like 进行过滤 show session variables LIKE "%var%";
set global var_name = value; set @@global.var_name = value;
show session variables; show global variables like "%var%";
以上がMySQLの変数とは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。