MySQL カスタム変数とステートメント終了区切り文字の基本について話しましょう

WBOY
リリース: 2022-01-18 18:00:50
転載
2342 人が閲覧しました

この記事では、mysql のカスタム変数とステートメント終了区切り文字に関する関連知識を提供します。お役に立てば幸いです。

MySQL カスタム変数とステートメント終了区切り文字の基本について話しましょう

ストアド プログラム

共通の関数を完了するために、多くのステートメントを実行する必要があり、そのたびにこれらのステートメントを 1 つずつ入力する必要があります。複数のステートメントは面倒です。 MySQL を非常に思慮深く設計したおじさんが、ストアド プログラム と呼ばれるものを提供してくれました。このいわゆる ストアド プログラム は、いくつかのステートメントをカプセル化できます。このストアド プロシージャを呼び出してこれらのステートメントを間接的に実行する簡単な方法です。呼び出し方法に応じて、ストアド プロシージャを次のタイプに分類できます: ストアド ルーチントリガー、および イベント。このうち、ストアド ルーチンは、ストアド関数ストアド プロシージャに細分化できます。それを示すために絵を描いてみましょう:

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>
ログイン後にコピー

この方法では、変数 ab は同じ値になります 'わはは !

クエリの結果に値が 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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート