ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

声明定义存储过程或者函数时,其中的 delimiter 关键字是干嘛的呢?

2021-10-01 15:04:42  阅读:237  来源: 互联网

标签:test1 affected mysql 干嘛 关键字 delimiter sec 结束符 OK


我们写 SQL 的时候,MySQL 怎么判断 SQL 是否已经结束了,可以去执行了?

需要一个结束符,当 MySQL 看到这个结束符的时候,表示可以执行前面的语句了,MySQL 默认以分号为结束符。

当我们创建存储过程或者自定义函数的时候,写了很大一片 SQL,里面包含了很多分号,但是整个代码语句是一个整体,不能让 MySQL 读到分号就立即去执行,这样肯定是不行的。我们需要完整的代码语句一起执行才行。所以此时我们就不可以用分号作为结束符了,必须另外声明结束符。

delimiter 关键字就是用来自定义结束符的,请参考下面的示例:

mysql> /*创建表test1*/
mysql> drop table IF EXISTS test1;
Query OK, 0 rows affected (0.01 sec)

mysql> create table test1(a int PRIMARY KEY,b int);
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql> /*声明脚本的结束符为$$*/
mysql> DELIMITER $$
mysql> DROP PROCEDURE IF EXISTS proc1;
    -> CREATE PROCEDURE proc1()
    -> BEGIN
    ->   /*声明了一个局部变量*/
    ->   DECLARE v_a int;
    ->
    ->   select ifnull(max(a),0)+1 into v_a from test1;
    ->   select @v_b:=v_a*2;
    ->   insert into test1(a,b) select v_a,@v_b;
    -> end $$
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> /*声明脚本的结束符为;*/
mysql> DELIMITER ;
mysql>
mysql> /*调用存储过程*/
mysql> call proc1();
+-------------+
| @v_b:=v_a*2 |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

Query OK, 1 row affected (0.01 sec)

mysql> /*查看结果*/
mysql> select * from test1;
+---+------+
| a | b    |
+---+------+
| 1 |    2 |
+---+------+
1 row in set (0.00 sec)

标签:test1,affected,mysql,干嘛,关键字,delimiter,sec,结束符,OK
来源: https://blog.csdn.net/liaowenxiong/article/details/120577804

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有