定界符
当我们编写SQL语句时,会使用分号(;)作为两条SQL语句之间的分隔符,如:
select * from test;
select id from users;
MySQL的客户端,像MySQL Workbench或者mysql程序也都是使用分号(;)来分隔语句并按条执行的。但是,当编写存储过程的时候,存储过程的内部会包含多条由分号隔开的语句。因此执行的过程中,客户端会把存储过程视为很多条语句分开执行,结果显而易见,创建存储过程的不会创建成功。
为了解决上述问题,我们需要定义定界符(delimiter)。我们可以使用单个字符或多个字符为做为定界符,如 // 或者 $$,使用单个符号的时候一定要注意,避免使用mysql中的一些预留符号,比如转义字符(\)等等。定义格式如下:
delimiter $$
上面我们将定界符定义为了$$符,那么,自定义时起,此连接下编写的语句的结束符都要使用$$来表示,就不再使用分号了。
select * from test$$
select id from users$$
通常我们在定义完一个存储过程以后会将定界符再改为分号。所以定界符也叫临时定界符。我们下面列举一个定义存储过程的实例:
drop procedure if exists sp_add;
-- 将定界符变更为$$
delimiter $$
create procedure sp_add(in a integer,in b integer)
begin
DECLARE result INTEGER default 0;
end$$
--重新将定界符设置为分号
delimiter ;
select * from test;