Stored procedures 使用ON Delete CASCADE删除深度嵌套子树

Stored procedures 使用ON Delete CASCADE删除深度嵌套子树,stored-procedures,mariadb,adjacency-list-model,Stored Procedures,Mariadb,Adjacency List Model,我正在研究删除邻接列表模型中存储的树的子树的方法。我设置了这段代码,它使用ON DELETE CASCADE删除一个完整的树。当我将max\uz设置为值>14时,MariaDB(Windows)会抛出以下错误: 从InnoDB中获取错误193'mydbtree,约束tree\u ibfk\u 1外键(parentid)引用tree(nodeid)ON DELETE CASCADE' 这是我的代码还是数据库的限制 DROP TABLE IF EXISTS tree; DROP PROCEDURE

我正在研究删除邻接列表模型中存储的树的子树的方法。我设置了这段代码,它使用ON DELETE CASCADE删除一个完整的树。当我将max\uz设置为值>14时,MariaDB(Windows)会抛出以下错误:

从InnoDB中获取错误193'
mydb
tree
,约束
tree\u ibfk\u 1
外键(
parentid
)引用
tree
nodeid
)ON DELETE CASCADE'

这是我的代码还是数据库的限制

DROP TABLE IF EXISTS tree;
DROP PROCEDURE IF EXISTS prepTree;

CREATE TABLE tree (
    name varchar(255) NOT NULL,
    nodeid INT NOT NULL AUTO_INCREMENT,
    parentid INT NULL,
    PRIMARY KEY(nodeid),
    FOREIGN KEY(parentid) REFERENCES tree(nodeid) ON DELETE CASCADE
) ENGINE=InnoDB;

DELIMITER // ;CREATE PROCEDURE prepTree()
    BEGIN
        DECLARE i INT;
        DECLARE max_ INT;

        SET max_ = 15; -- >14 won't work

        INSERT INTO tree(name, parentid) VALUES("root", NULL);

        SET i = 1;  
        WHILE i <= max_ DO
            INSERT INTO tree(name, parentid) VALUES("child", i);        
            SET i = i + 1;
        END WHILE;

    END //
DELIMITER ; //
CALL prepTree; 

DELETE FROM tree WHERE name = "root";
SELECT * FROM tree; --table will be empty on success
如果存在树,则删除表;
删除程序(如果存在);
创建表树(
名称varchar(255)不为空,
nodeid INT NOT NULL自动增量,
parentid INT NULL,
主键(nodeid),
删除级联上的外键(parentid)引用树(nodeid)
)引擎=InnoDB;
分隔符/;创建过程预处理树()
开始
声明i INT;
声明最大值;
设置最大值=15;-->14不起作用
在树中插入(名称、父ID)值(“根”,NULL);
设置i=1;

虽然我我知道它同样适用于MariaDB

参考动作

  • 。。。级联操作的嵌套深度不得超过15层


我知道这同样适用于MariaDB

参考动作

  • 。。。级联操作的嵌套深度不得超过15层