この記事では、mysql のカスタム変数とステートメント終了区切り文字に関する関連知識を提供します。お役に立てば幸いです。
共通の関数を完了するために、多くのステートメントを実行する必要があり、そのたびにこれらのステートメントを 1 つずつ入力する必要があります。複数のステートメントは面倒です。 MySQL
を非常に思慮深く設計したおじさんが、ストアド プログラム
と呼ばれるものを提供してくれました。このいわゆる ストアド プログラム
は、いくつかのステートメントをカプセル化できます。このストアド プロシージャを呼び出してこれらのステートメントを間接的に実行する簡単な方法です。呼び出し方法に応じて、ストアド プロシージャ
を次のタイプに分類できます: ストアド ルーチン
、トリガー
、および イベント
。このうち、ストアド ルーチン
は、ストアド関数
とストアド プロシージャ
に細分化できます。それを示すために絵を描いてみましょう:
馴染みのない概念がたくさんあることを恐れないでください。後で詳しく説明します。ただし、ストアド プロシージャ
を正式に導入する前に、まず MySQL
のカスタム変数とステートメント終了区切り文字の概念を理解する必要があります。
人生では、数値 100
、文字列 'Hello'
などの固定値に遭遇することがよくあります。固定値を持つこれらのものを 定数
と呼びます。しかし、便宜上、値を表すために特定の記号を使用することがありますが、その記号が表す値は変わる可能性があります。たとえば、記号 a
が数値 1
を表すと規定し、その後、記号 a
が数値 2
を表すようにすることができます。この値を実現できます。変更されたものは 変数
と呼ばれ、シンボル a
はこの変数の 変数名
と呼ばれます。 MySQL
では、SET
ステートメントを使用して独自の変数の一部をカスタマイズできます。例:
mysql> SET @a = 1; Query OK, 0 rows affected (0.00 sec) mysql>
上記のステートメントは、名前を定義したことを示しています。変数 a
であり、整数 1
がこの変数に割り当てられます。ただし、MySQL を設計したおじさんが、カスタム変数の前に @
シンボルを追加する必要があると規定しているという事実に誰もが注意する必要があります (少し奇妙ですが、これは他の人が規定したものです)したがって、誰もがそれを遵守する必要があります)。
この変数の値を後で確認したい場合は、SELECT
ステートメントを使用するだけですが、変数名の前に @
記号を追加する必要があります。
mysql> SELECT @a; +------+ | @a | +------+ | 1 | +------+ 1 row in set (0.00 sec) mysql>
同じ変数に異なるタイプの値を格納することもできます。たとえば、変数 a
:
mysql> SET @a = '哈哈哈'; Query OK, 0 rows affected (0.01 sec) mysql> SELECT @a; +-----------+ | @a | +-----------+ | 哈哈哈 | +-----------+ 1 row in set (0.00 sec) mysql>
に定数を割り当てるだけでなく、文字列値を変数に割り当てます。 a 変数に加えて、ある変数を別の変数に代入することもできます。
mysql> SET @b = @a; Query OK, 0 rows affected (0.00 sec) mysql> select @b; +-----------+ | @b | +-----------+ | 哈哈哈 | +-----------+ 1 row in set (0.00 sec) mysql>
この方法では、変数 a
と b
は同じ値になります 'わはは
!
クエリの結果に値が 1 つだけある場合、特定のクエリの結果を変数に代入することもできます。
mysql> SET @a = (SELECT m1 FROM t1 LIMIT 1); Query OK, 0 rows affected (0.00 sec) mysql>
別の形式のステートメントを使用して、クエリ結果 結果は変数に割り当てられます:
mysql> SELECT n1 FROM t1 LIMIT 1 INTO @b; Query OK, 1 row affected (0.00 sec) mysql>
ステートメント SELECT m1 FROM t1 LIMIT 1
および SELECT n1 FROM t1 LIMIT 1
のクエリ結果には、値は 1 つだけなので、変数 a
または b
に直接割り当てることができます。これら 2 つの変数の値を確認してみましょう:
mysql> SELECT @a, @b; +------+------+ | @a | @b | +------+------+ | 1 | a | +------+------+ 1 row in set (0.00 sec) mysql>
クエリ結果がレコード内に複数の列値を持つレコードである場合、これらの値を別の変数に割り当てたいと考えます。 INTO
ステートメントを使用できます:
mysql> SELECT m1, n1 FROM t1 LIMIT 1 INTO @a, @b; Query OK, 1 row affected (0.00 sec) mysql>
このクエリ ステートメントの結果セットには 1 つのレコードのみが含まれます。このレコードの m1
列の値を入れます。は変数 a
に代入され、列 n1
の値は変数 b
に代入されます。
MySQL
クライアントの対話型インターフェイスで、キーボード入力を完了して Enter キーを押すと、MySQL
クライアントは、入力したコンテンツに ;
、\g
、\G
の 3 つの記号のいずれかが含まれているかどうかを検出し、含まれている場合は入力します。サーバーに。このように、複数のステートメントを一度にサーバーに送信したい場合は、次のようにこれらのステートメントを 1 行で記述する必要があります。
mysql> SELECT * FROM t1 LIMIT 1;SELECT * FROM t2 LIMIT 1;SELECT * FROM t3 LIMIT 1; +------+------+ | m1 | n1 | +------+------+ | 1 | a | +------+------+ 1 row in set (0.00 sec) +------+------+ | m2 | n2 | +------+------+ | 2 | b | +------+------+ 1 row in set (0.00 sec) +------+------+ | m3 | n3 | +------+------+ | 3 | c | +------+------+ 1 row in set (0.00 sec) mysql>
この不便な理由は、MySQL です。
入力の終わりを検出するためにクライアントが使用する記号は、各ステートメントを区切る記号と同じです。実際、delimiter
コマンドを使用して、MySQL
検出ステートメント入力の末尾にある記号 (いわゆる ステートメント終了区切り文字 ##) をカスタマイズすることもできます。 #、次のように:
mysql> delimiter $ mysql> SELECT * FROM t1 LIMIT 1; -> SELECT * FROM t2 LIMIT 1; -> SELECT * FROM t3 LIMIT 1; -> $ +------+------+ | m1 | n1 | +------+------+ | 1 | a | +------+------+ 1 row in set (0.00 sec) +------+------+ | m2 | n2 | +------+------+ | 2 | b | +------+------+ 1 row in set (0.00 sec) +------+------+ | m3 | n3 | +------+------+ | 3 | c | +------+------+ 1 row in set (0.00 sec) mysql>
delimiter $
命令意味着修改语句结束分隔符为$
,也就是说之后MySQL
客户端检测用户语句输入结束的符号为$
。上边例子中我们虽然连续输入了3个以分号;
结尾的查询语句并且按了回车键,但是输入的内容并没有被提交,直到敲下$
符号并回车,MySQL
客户端才会将我们输入的内容提交到服务器,此时我们输入的内容里已经包含了3个独立的查询语句了,所以返回了3个结果集。
我们也可以将语句结束分隔符
重新定义为$
以外的其他包含单个或多个字符的字符串,比方说这样:
mysql> delimiter EOF mysql> SELECT * FROM t1 LIMIT 1; -> SELECT * FROM t2 LIMIT 1; -> SELECT * FROM t3 LIMIT 1; -> EOF +------+------+ | m1 | n1 | +------+------+ | 1 | a | +------+------+ 1 row in set (0.00 sec) +------+------+ | m2 | n2 | +------+------+ | 2 | b | +------+------+ 1 row in set (0.00 sec) +------+------+ | m3 | n3 | +------+------+ | 3 | c | +------+------+ 1 row in set (0.00 sec) mysql>
我们这里采用了EOF
作为MySQL
客户端检测输入结束的符号,是不是很easy啊!当然,这个只是为了方便我们一次性输入多个语句,在输入完成之后最好还是改回我们常用的分号;
吧:
mysql> delimiter ;
小贴士: 我们应该避免使用反斜杠(\)字符作为语句结束分隔符,因为这是MySQL的转义字符。
推荐学习:mysql视频教程
以上がMySQL カスタム変数とステートメント終了区切り文字の基本について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。