Я искал способы удаления поддеревьев деревьев, хранящихся в модели списка смежности.Я установил этот код, который удаляет полное дерево, используя ON DELETE CASCADE.Когда я устанавливаю max_ на значение> 14, MariaDB (Windows) выдает эту ошибку:
Получена ошибка 193 'mydb
. tree
, CONSTRAINT tree_ibfk_1
FOREIGN KEY (parentid
) ССЫЛКИ tree
(nodeid
) НА УДАЛИТЬ КАСКАД 'от InnoDB
Это мой код или ограничение базы данных?
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