MySQL过程语言

MySQL过程语言,mysql,Mysql,SQL查询:文档 CREATE PROCEDURE tree_add_root() BEGIN START TRANSACTION; $max = SELECT MAX(`rht`) FROM trees; INSERT INTO trees(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES(1, 'Index', 'Index', '', 1,$max+1 , 0); COMMENT; END; My

SQL查询:文档

CREATE PROCEDURE tree_add_root()
BEGIN
START TRANSACTION;
$max = SELECT MAX(`rht`) FROM trees;
INSERT INTO trees(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES(1, 'Index', 'Index', '', 1,$max+1 , 0);
COMMENT;
END;
MySQL说:文档

CREATE PROCEDURE tree_add_root()
BEGIN
START TRANSACTION;
$max = SELECT MAX(`rht`) FROM trees;
INSERT INTO trees(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES(1, 'Index', 'Index', '', 1,$max+1 , 0);
COMMENT;
END;
1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近“=从树中选择MAXrht;插入到treestree_id中, 第4行的名称、标签、`

我怎样才能解决这个问题

Use This

CREATE PROCEDURE tree_add_root()
BEGIN
DECLARE v_max int(11);
START TRANSACTION;
SELECT MAX(`rht`) into v_max FROM trees;
INSERT INTO trees(`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`) VALUES(1, 'Index', 'Index', '', 1,v_max+1 , 0);
COMMIT;
END;
在MySQL过程中使用任何变量之前,需要先使用上面查询中的declare关键字进行声明,然后启动主体开始。在此处使用v_max而不是$max


也可以使用COMMIT关键字而不是comment。

在我对您的问题所做的评论之后

…你可以试试这个,伙计:

DROP PROCEDURE IF EXISTS `tree_add_root`;
DELIMITER //CREATE PROCEDURE `tree_add_root` ()
BEGIN
    START TRANSACTION;      
    SET @max = (SELECT MAX(`rht`) FROM trees);      
    INSERT INTO trees (`tree_id`, `name`, `label`, `description`, `lft`, `rht`, `lvl`)
    VALUES (1, 'Index', 'Index', '', 1, (@max + 1), 0);     
    COMMIT;
END//
DELIMITER ;
因此,无论何时调用函数,都需要执行以下操作:

CALL tree_add_root();

我希望这个能帮助你,干杯

$max是一个变量,我在其中存储了rhtI的最大值,我希望从树中获取maxrht,并希望将该值放入insert查询中。我该怎么做呢?用@max代替$maxafter试试@max我遇到了这个问题MySQL说:文档1064-你的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在“@max=SELECT MAXrht FROM trees”附近使用的正确语法;在第5行的treestree_id中插入名称“labe”;你是说承诺;朋友