MySQLカスタム変数の概念と特徴


MySQLのカスタムは、ストレージ値の一時的なコンテナであり、サービスとの接続が活発であれば、コンテナの値を保存して使用することができます。簡単なSETまたはSELECT文でカスタム変数を設定できます。以下の通りです。

SET @one := 1;
SET @min_actor := (SELECT MIN(actor_id) FROM sakila.actor);
SET @last_week := CURRENT_DATE-INTERNAL 1 WEEK;
変数を定義すると、この変数はSQL文で使用できます。

SELECT * FROM film WHERE created_date <= @last_week;
MySQLカスタム変数は強力ですが、カスタム変数自体にも欠陥があることを知る必要があります。
  • カスタム変数は、クエリーキャッシュを無効にします。
  • は、代替的な意味上の識別子として、例えば表名または列名、またはLIMIT子文として使用することができない。
  • カスタム変数は単一接続に基づいていますので、接続にまたがって使用することはできません。
  • 接続プールまたは永続的接続を使用すると、ユーザー定義変数は、コードのbugまたは接続プールのbugであるかもしれないが、相互分離につながる可能性があります。
  • はMySQL 5.0以前のバージョンでは、大文字小文字に敏感なので注意してください。
  • は変数タイプを表示できなくて指定しますが、実際の変数のタイプは不確定なタイプの推論に依存しています。バージョンによって違いがあります。最初に定義した時にタイプを指定します。たとえば、0を使って整数変数を設定し、0.0を設定して浮動小数変数を設定します。しかし、後に新しい値を指定すると、新しい値に従ってタイプが変わります。これはMySQLのカスタム変数のタイプがダイナミックなためです。
  • 最適化器は、場合によってはカスタム変数を最適化してしまう可能性があり、所望の方法で照会することができなくなります。
  • による値付けの順序、さらには、値付けの時間までが不確定であり、これは、最適化器によって選択されたクエリースキームに依存する。したがって、最終的な結果は人を困惑させるかもしれない。
  • 割当演算子の優先度は他の任意の操作子より低いので、括弧を表示して使用しなければならない。
  • 変数が定義されていないとエラーが発生する恐れがあります。
  • カスタム変数は、SELECT文だけでなく、すべての種類の文で使用できます。実際には、カスタム変数の最大の利点です。例えば、サブクエリを利用して並べ替えの計算を行うとか、低価格のUPDATE文を作成するなど、複雑なクエリを書き換えることができます。
    一部の場合、この変数はコンパイル時の定数であり、割り当てを行わないと考えられています。これは期待される行動を奇妙に引き起こします。ユーザー定義の変数の割り当て値を類似のLEAST関数に入れると、通常この問題は回避されます。もう一つの方法は、使用前にカスタム変数の値を確認することです。時々このようにしたいですが、時々そうしたくないです。
    いくつかの小さな実験を通して、カスタム変数を使って多くの面白いことができます。例えば、
  • は、総量と平均値を計算する。
  • は、パケットクエリに関するFIRSTおよびLAST関数のシミュレーションを行う。
  • は大きな数に対して数学演算を行う。
  • は、一枚のテーブルをMD 5のハッシュ値に変換する。
  • は、0値近くをフィルタリングしたが、設定された境界を超えるサンプル値をフィルタリングする。
  • 読み書きポインタの位置をシミュレートする。
  • は、変数をWHERE条件に埋め込み、SHOW文で表示する。
  • ユーザー定義変数は、いくつかのアプリケーションで有用です。たとえば、出現回数を統計して、同じデータを更新したり挿入したりする回数を計算します。また、遅延した共同クエリは、次の記事で具体的な使い方を紹介します。
    以上がMySQLのカスタム変数の概念と特徴の詳細です。MySQLカスタム変数に関する資料は他の関連記事に注目してください。