请注意,DELIMITER关键字只是命令行 mysql客户机(和其他一些客户机)的函数,而不是常规的 MySQL 语言特性。如果您试图将它通过编程语言 API 传递给 MySQL,那么它将无法工作。其他一些客户端(如 PHPMyAdmin)也有其他方法来指定非默认的分隔符。
例如:
DELIMITER $$
/* This is a complete statement, not part of the procedure, so use the custom delimiter $$ */
DROP PROCEDURE my_procedure$$
/* Now start the procedure code */
CREATE PROCEDURE my_procedure ()
BEGIN
/* Inside the procedure, individual statements terminate with ; */
CREATE TABLE tablea (
col1 INT,
col2 INT
);
INSERT INTO tablea
SELECT * FROM table1;
CREATE TABLE tableb (
col1 INT,
col2 INT
);
INSERT INTO tableb
SELECT * FROM table2;
/* whole procedure ends with the custom delimiter */
END$$
/* Finally, reset the delimiter to the default ; */
DELIMITER ;
您定义一个 DELIMITER 来告诉 mysql 客户机将语句、函数、存储过程或触发器视为一个完整的语句。一般来说。Sql 文件设置不同的 DELIMITER,如 $$。DELIMITER 命令用于更改 MySQL 命令的标准分隔符(即;)。由于例程(函数、存储过程或触发器)中的语句以分号(;)结束,因此将它们视为复合语句
我们使用 DELIMITER。如果在同一个文件或命令行中使用不同的例程时没有定义,则会产生语法错误。
请注意,您可以使用各种非保留字符来制作自己的自定义分隔符。您应该避免使用反斜杠()字符,因为这是 MySQL 的转义字符。
DELIMITER 实际上不是一个 MySQL 语言命令,它是一个客户端命令。
例子
DELIMITER $$
/*This is treated as a single statement as it ends with $$ */
DROP PROCEDURE IF EXISTS `get_count_for_department`$$
/*This routine is a compound statement. It ends with $$ to let the mysql client know to execute it as a single statement.*/
CREATE DEFINER=`student`@`localhost` PROCEDURE `get_count_for_department`(IN the_department VARCHAR(64), OUT the_count INT)
BEGIN
SELECT COUNT(*) INTO the_count FROM employees where department=the_department;
END$$
/*DELIMITER is set to it's default*/
DELIMITER ;