Stored procedures 使用ON Delete CASCADE删除深度嵌套子树
我正在研究删除邻接列表模型中存储的树的子树的方法。我设置了这段代码,它使用ON DELETE CASCADE删除一个完整的树。当我将max\uz设置为值>14时,MariaDB(Windows)会抛出以下错误: 从InnoDB中获取错误193'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
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层