Невозможно обновить таблицу 'xguilds_relations' в хранимой функции / триггере, поскольку она уже используется оператором, который вызвал эту хранимую функцию / триггер - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь обновить таблицу, и это приводит к следующей ошибке:

Невозможно обновить таблицу 'xguilds_relations' в хранимой функции / триггере, поскольку она уже используется оператором, который вызвал это сохраненная функция / триггер. в com. mysql .cj.jdb c .exceptions.SQLError.createSQLException (SQLError. java: 129) ~ [?:?]

Я знаю, что не может иметь триггер это модифицирует таблицу и запускается при обновлении той же таблицы. Тем не менее, в моей текущей структуре я не знаю никаких обновлений от триггеров к той же таблице ...

Я пытаюсь сделать следующее:

INSERT INTO `xguilds_relations` ( `id1`, `id2`, `relation` ) VALUES ( ?, ?, ? ) ON DUPLICATE KEY UPDATE `relation` = VALUES(`relation`);

У меня есть следующее таблицы и триггеры:

manager.fastExecute("CREATE TABLE IF NOT EXISTS `xguilds_relations` ("
                    + " `id1` INT NOT NULL,"
                    + " `id2` INT NOT NULL,"
                    + " `relation` INT NOT NULL DEFAULT 3,"
                    + " `dominance` INT NOT NULL DEFAULT 0,"
                    + " PRIMARY KEY ( `id1`, `id2` ),"
                    + " FOREIGN KEY ( `id1` ) REFERENCES `xguilds_guilds` ( `id` ) ON DELETE CASCADE,"
                    + " FOREIGN KEY ( `id2` ) REFERENCES `xguilds_guilds` ( `id` ) ON DELETE CASCADE,"
                    + " CHECK ( `id2` > `id1` )"
                    + " );");

manager.fastExecute("CREATE TABLE IF NOT EXISTS `xguilds_chests` ("
                    + " `guild` INT NOT NULL,"
                    + " `player` VARCHAR ( 64 ) NULL,"
                    + " `allytruce` INT NULL,"
                    + " `world` VARCHAR ( 32 ) NOT NULL,"
                    + " `x` INT NOT NULL,"
                    + " `y` INT NOT NULL,"
                    + " `z` INT NOT NULL,"
                    + " PRIMARY KEY ( `guild`, `world`, `x`, `y`, `z` ),"
                    + " FOREIGN KEY ( `guild` ) REFERENCES `xguilds_guilds` ( `id` ) ON DELETE CASCADE"
                    + " );");

manager.fastExecute("CREATE TRIGGER `xguilds_removechests_delete` AFTER DELETE ON `xguilds_relations`"
                    + " FOR EACH ROW BEGIN"
                    + " DELETE FROM `xguilds_chests` WHERE ( `guild` = OLD.`id1` AND `allytruce` = OLD.`id2` )"
                    + " OR ( `guild` = OLD.`id2` AND `allytruce` = OLD.`id1` );"
                    + " END;");

manager.fastExecute("CREATE TRIGGER `xguilds_removechests_update` AFTER UPDATE ON `xguilds_relations`"
                    + " FOR EACH ROW BEGIN"
                    + " DELETE FROM `xguilds_chests` WHERE ( `guild` = OLD.`id1` AND `allytruce` = OLD.`id2` )"
                    + " OR ( `guild` = OLD.`id2` AND `allytruce` = OLD.`id1` );"
                    + " END;");

В таблице xguilds_chests нет триггеров.

Любая помощь приветствуется.

...