存储程序

自定义变量和语句结束分隔符 - 图1

自定义变量

变量定义符号:**@**

  • 设置变量,并赋值 ```sql 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. ```sql
  3. mysql> SET @a = '哈哈哈';
  4. Query OK, 0 rows affected (0.01 sec)
  5. mysql> SELECT @a;
  6. +-----------+
  7. | @a |
  8. +-----------+
  9. | 哈哈哈 |
  10. +-----------+
  11. 1 row in set (0.00 sec)
  • 变量 a 的值,赋值给 变量 b ```sql mysql> SET @b = @a; Query OK, 0 rows affected (0.00 sec)

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

  1. - 将查询结果赋值给变量
  2. - 前提是该查询结果只有一个**值**,注意:这是一个值,不是一条记录。
  3. 方式一:该方式只能存储只有一个值的一条记录。
  4. ```sql
  5. mysql> SET @a = (SELECT m1 FROM t1 LIMIT 1);
  6. Query OK, 0 rows affected (0.00 sec)

方式二:

  1. mysql> SELECT n1 FROM t1 LIMIT 1 INTO @b;
  2. Query OK, 1 row affected (0.00 sec)

方式二可以用来将一条查询记录中的多个值赋值到多个变量上

  1. mysql> SELECT m1, n1 FROM t1 LIMIT 1 INTO @a, @b;
  2. Query OK, 1 row affected (0.00 sec)

语句结束分隔符

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

  1. mysql> SELECT * FROM t1 LIMIT 1;SELECT * FROM t2 LIMIT 1;SELECT * FROM t3 LIMIT 1;
  2. +------+------+
  3. | m1 | n1 |
  4. +------+------+
  5. | 1 | a |
  6. +------+------+
  7. 1 row in set (0.00 sec)
  8. +------+------+
  9. | m2 | n2 |
  10. +------+------+
  11. | 2 | b |
  12. +------+------+
  13. 1 row in set (0.00 sec)
  14. +------+------+
  15. | m3 | n3 |
  16. +------+------+
  17. | 3 | c |
  18. +------+------+
  19. 1 row in set (0.00 sec)
  20. mysql>