MySQL中的分隔符有什么作用

  介绍

这篇文章主要介绍“MySQL中的分隔符有什么作用”,在日常操作中,相信很多人在MySQL中的分隔符有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“MySQL中的分隔符有什么作用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

  MySql中分隔符的作用是什么?

这个命令与存储过程没什么关系吧。
其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。
默认情况下,分隔符是分号<强>,强。在命令行客户端中,如果有一行命令以分号结束,
那么回车后,mysql将会执行该命令。如输入下面的语句
mysql>select * from test_table;
然后回车,那么MySQL将立即执行该语句。

但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号。
如试图在命令行客户端中输入如下语句
mysql>创建函数“缩短”(S VARCHAR (255), N INT)
mysql>,,返回varchar (255)
mysql>开始
mysql>如果ISNULL (S),那么
mysql>,,<强>返回& # 39;& # 39;;
mysql>ELSEIF N<15然后
mysql>,,返回左(S、N);
mysql>其他
mysql>,,如果CHAR_LENGTH (S) & lt;然后=N
mysql>,,返回年代;
mysql>,,其他
mysql>,,返回CONCAT(左(年代,N-10) & # 39;……& # 39;,右(年代,5));
mysql>,,如果,
mysql>如果,
mysql>结束;
默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
因为mysql一遇到分号,它就要自动执行。
即在语句<强>返回& # 39;& # 39;;时,mysql解释器就要执行了。
这种情况下,就需要事先把分隔符换成其它符号,如//或$ $。
mysql>分隔符//
mysql>创建函数“缩短”(S VARCHAR (255), N INT)
mysql>,,返回varchar (255)
mysql>开始
mysql>如果ISNULL (S),那么
mysql>,,<强>返回& # 39;& # 39;;
mysql>ELSEIF N<15然后
mysql>,,返回左(S、N);
mysql>其他
mysql>,,如果CHAR_LENGTH (S) & lt;然后=N
mysql>,,返回年代;
mysql>,,其他
mysql>,,返回CONCAT(左(年代,N-10) & # 39;……& # 39;,右(年代,5));
mysql>,,如果,
mysql>如果,
mysql>结束;<强>//
这样只有当<强>//强出现之后,mysql解释器才会执行这段语句

  例子:

  mysql>分隔符//,

mysql>创建过程simpleproc (param1 INT),
→BEGIN 
→SELECT COUNT (*) param1从t;,
→结束,,
→//,
查询好,0行影响(0.00秒),

mysql>分隔符,,

mysql>调用simpleproc (@a);,
查询好,0行影响(0.00秒),

mysql>选择@a;,
+——+,
| @a |,
+——+,
| 3 |,
+——+,
1行组(0.00秒),

  本文代码在MySQL 5.0.41-community-nt下运行通过。

  编写了个统计网站访问情况(用户代理)的MySQL存储过程。就是下面的这段SQL代码。

 drop  procedure  if  exists  pr_stat_agent;
  
  ——,call  pr_stat_agent  (& # 39; 2008 - 07 - 17 & # 39;,, & # 39; 2008 - 07 - 18 & # 39;)
  
  create  procedure  pr_stat_agent
  (
  ,,pi_date_from 日期
  pi_date_to ,,,,,,
  )
  开始
  ,,,,check 输入
  ,,if  (pi_date_from  is  null),然后
  ,,,,,set  pi_date_from =,当前日期();
  ,才能最终获得;如果;
  
  ,,if  (pi_date_to  is  null),然后
  ,,,,,set  pi_date_to =, pi_date_from;
  ,才能最终获得;如果;
  
  ,,set  pi_date_to =, date_add (pi_date_from, interval  1,);
  
  ,,,,统计
  ,,select 代理,count (*), as 问
  ,,,,得到apache_log
  ,,,where  request_time 祝辞=pi_date_from
  ,,,,,以及request_time  & lt;, pi_date_to
  ,,,group  by 代理
  ,,,order  by  cnt  desc;
  结束;

  我在EMS SQL经理2005 MySQL这个MySQL图形客户端下可以顺利运行。但是在SQLyog MySQL GUI v5.02这个客户端就会出错。最后找到原因是没有设置好分隔符的问题。默认情况下,分隔符”;“用于向MySQL提交查询语句。在存储过程中每个SQL语句的结尾都有个“;”,如果这时候,每逢”;“就向MySQL提交的话,当然会出问题了。于是更改MySQL的分隔符,上面MySQL存储过程就编程这样子了:

 delimiter //,,,,,,,,改变,MySQL  delimiter 为:“//?
  
  drop  procedure  if  exists  pr_stat_agent //?call  pr_stat_agent  (& # 39; 2008 - 07 - 17 & # 39;,, & # 39; 2008 - 07 - 18 & # 39;)
  
  create  procedure  pr_stat_agent
  (
  ,,pi_date_from 日期
  pi_date_to ,,,,,,
  )
  开始
  ,,,,check 输入
  ,,if  (pi_date_from  is  null),然后
  ,,,,,set  pi_date_from =,当前日期();
  ,才能最终获得;如果;
  
  ,,if  (pi_date_to  is  null),然后
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

MySQL中的分隔符有什么作用