Mysql自定义变量和结束分隔符

Mysql自定义变量和结束分隔符

Posted by WangZiTao on Tuesday, July 7, 2020

1. 自定义变量

1-1. SET方式赋值

自定义变量前边必须加一个 @ 符号,环境变量赋值用SET,查询变量时用 SELECT,不过仍然需要在变量名称前加一个@符号。

mysql> set @a = '1';
Query OK, 0 rows affected (0.00 sec)

mysql> select @a;
+------+
| @a   |
+------+
| 1    |
+------+
1 row in set (0.00 sec)

1-2. 环境变量之间相互赋值

环境变量也可以相互之间赋值,比如把a的值赋值给b。

mysql> set @b = @a;
Query OK, 0 rows affected (0.00 sec)

mysql> select @b;
+------+
| @b   |
+------+
| 1    |
+------+
1 row in set (0.00 sec)

1-3. 根据查询结果赋值

我们还可以将某个查询的结果赋值给一个变量,前提是这个查询的结果只有一个值:

mysql> set @a =(select age from a where id =1);
Query OK, 0 rows affected (0.00 sec)

mysql> select @a;
+------+
| @a   |
+------+
|   11 |
+------+
1 row in set (0.00 sec)

否则会报错:

mysql> set @a =(select age from a where age ='11');
ERROR 1242 (21000):

1-4. 使用INTO赋值

还可以用另一种形式的语句来将查询的结果赋值给一个变量,为查询语句加上limit 可以确保只有一个返回结果。

mysql> select age from a where age = '11' limit 1 into @b;
Query OK, 1 row affected (0.00 sec)

mysql> select @b;
+------+
| @b   |
+------+
|   11 |
+------+
1 row in set (0.00 sec)

2. 语句结束分隔符

在MySQL客户端的交互界面处,当我们完成键盘输入并按下回车键时,MySQL客户端会检测我们输入的内容中是否包含 ;\g 或者 \G这三个符号之一,如果有的话,会把我们输入的内容发送到服务器。这样一来,如果我们想一次性给服务器发送多条的话,就需要把这些语句写到一行中,比如这样:

mysql> select age from a; select id from a;
+-----+
| age |
+-----+
|  11 |
|  15 |
|  11 |
+-----+
3 rows in set (0.00 sec)

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)


--------------------------------------
mysql>  select age from a\g select id from a \g
+-----+
| age |
+-----+
|  11 |
|  15 |
|  11 |
+-----+
3 rows in set (0.00 sec)

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

delimiter $ 命令意味着修改语句结束分隔符为 $,也就是说之后MySQL客户端检测用户语句输入结束的符号为 $ 。上边例子中我们虽然连续输入了3个以分号;结尾的查询语句并且按了回车键,但是输入的内容并没有被提交,直到敲下 $ 符号并回车,MySQL客户端才会将我们输入的内容提交到服务器,此时我们输入的内容里已经包含了2个独立的查询语句了,所以返回了2个结果集。

mysql> delimiter $
mysql> select age from a ;
    -> select id from a ;
    -> $
+-----+
| age |
+-----+
|  11 |
|  15 |
|  11 |
+-----+
3 rows in set (0.00 sec)

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

我们也可以将语句结束分隔符重新 定义为$以外的其他包含单个或多个字符的字符串,比方说这样 把 $ 改为 end :

mysql> delimiter end
mysql> select id from a ;
    -> select age from a ;
    -> end
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

+-----+
| age |
+-----+
|  11 |
|  15 |
|  11 |
+-----+
3 rows in set (0.00 sec)

comments powered by Disqus