DELIMITER 再mysql5.7版本有吗
时间: 2023-08-16 13:07:45 浏览: 44
在 MySQL 5.7 版本中,DELIMITER 命令仍然存在。它的作用与之前的版本一样,用于更改 SQL 语句中的分隔符,以便在定义存储过程、触发器、函数等对象时,可以在其主体中包含多个 SQL 语句。
下面是一个使用 DELIMITER 命令的例子:
```
DELIMITER //
CREATE PROCEDURE my_proc()
BEGIN
-- SQL statement 1
-- SQL statement 2
END //
DELIMITER ;
```
在这个例子中,我们使用 DELIMITER // 命令将分隔符更改为 //,然后定义了一个名为 my_proc 的存储过程,并在主体中包含了两个 SQL 语句。最后,我们使用 DELIMITER ; 命令将分隔符更改回原来的分号。在 MySQL 5.7 中,DELIMITER 命令的用法与之前的版本相同,使用方法也类似。
相关问题
MySQL5.7有没有递归功能
MySQL 5.7 版本中没有提供原生的递归功能,但可以通过使用存储过程或者递归查询实现递归操作。
使用存储过程可以实现递归操作,例如:
```
DELIMITER $$
CREATE PROCEDURE recursive_procedure(IN id INT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE temp_id INT;
DECLARE cur CURSOR FOR SELECT child_id FROM table_name WHERE parent_id = id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO temp_id;
IF done THEN
LEAVE read_loop;
END IF;
CALL recursive_procedure(temp_id);
END LOOP;
CLOSE cur;
END $$
DELIMITER ;
```
以上存储过程会递归查询表中指定 id 的子节点。
递归查询可以使用 WITH RECURSIVE 关键字,例如:
```
WITH RECURSIVE cte AS (
SELECT id, parent_id, name, 1 AS level
FROM table_name
WHERE id = 1
UNION ALL
SELECT tn.id, tn.parent_id, tn.name, cte.level + 1
FROM table_name tn
JOIN cte ON tn.parent_id = cte.id
)
SELECT * FROM cte;
```
以上查询会递归查询表中 id=1 的节点的所有子节点,并返回每个节点的 id、parent_id、name 和层数。
delimiter在mysql中有什么用
在 MySQL 中,`delimiter` 用于更改查询中的语句分隔符,以便在查询中使用自定义分隔符。默认情况下,MySQL 使用分号(`;`)作为语句分隔符。但是,在某些情况下,您可能需要使用分号作为查询中的一部分,例如在存储过程或触发器中。
在这些情况下,您可以使用 `delimiter` 命令更改分隔符。例如,您可以使用以下命令将分隔符更改为双美元符号(`$$`):
```
delimiter $$
```
然后,您可以使用 `$$` 作为查询中的语句分隔符。最后,使用以下命令将分隔符更改回分号:
```
delimiter ;
```
需要注意的是,`delimiter` 命令只会影响当前查询中的分隔符,不会影响其他查询。