我经常看到人们使用分隔符.我试着找出什么是分隔符,它们的用途是什么.在谷歌搜索了20分钟后,我没能找到一个让我满意的答案.所以,我现在的问题是:什么是分隔符,什么时候应该使用它们?

推荐答案

在定义函数、存储过程和触发器时,通常使用默认值;以外的分隔符,其中必须定义多个语句.您定义了一个不同的分隔符,如$$,用于定义整个过程的结束,但在它内部,每个语句都以;结尾.这样,当代码在mysql客户端中运行时,客户端可以知道整个过程的结束位置,并将其作为一个单元执行,而不是执行其中的单个语句.

请注意,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与不支持它的客户端一起使用,将导致它被发送到服务器,服务器将报告语法错误.例如,使用PHP和MySQLi:

$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;

以下错误:

您的SQL语法有错误;判断相应的手册

Mysql相关问答推荐

SQL条件 Select 和条件WHERE

MySQL查询获取图书的唯一读取页面数

加载数据本地infile,字段中有双引号和逗号

拒绝非超级用户访问停靠的MariaDB(超级用户工作)

根据计数按月和年对数据进行分组()

Google Sheet查询以提取数据并用值替换复选框.(差异)

如何在MySQL中检索两列的值不同的行

MySQL将JSON值从对象类型更改为数组

在MySQL和JavaFX中保存和检索图像文件

java.lang.NullPointerException:无法调用com.proj.my.repository.OrderRepository.save(Object),因为this.orderRepository为空

如何使用减号运算符编写 sql 查询以返回缺少相应值的行?

创建表时我的 SQL 语句有什么问题

巨大的未分区 MySQL 表问题

基于 2 列的重复行的 SQL 查询

Over() 函数不覆盖表中的所有行

MySQL Workbench - 如何同步 EER 图

将相同的固定值插入多行

将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是什么?

NodeJS/mySQL - ER_ACCESS_DENIED_ERROR 用户'root'@'localhost'的访问被拒绝(使用密码:是)

如何计算表格的列数