Я пытаюсь обновить таблицу, и это приводит к следующей ошибке:
Невозможно обновить таблицу '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
нет триггеров.
Любая помощь приветствуется.