Как удалить все триггеры из таблицы?

112
15 февраля 2021, 21:10

Нужно сделать процедуру, которая будет удалять триггеры. Вариант 1.

DELIMITER $$ 
CREATE PROCEDURE sym_drop_cur_triggers (IN database_name VARCHAR(255), table_name VARCHAR(255))
BEGIN
 DECLARE done INT DEFAULT 0;
 DECLARE trigger_to_rm VARCHAR(255);
 DECLARE cur1 CURSOR FOR SELECT t.TRIGGER_NAME from information_schema.TRIGGERS t 
 WHERE t.TRIGGER_SCHEMA = database_name
  AND t.EVENT_OBJECT_TABLE = table_name;
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 OPEN cur1;
  REPEAT
  FETCH cur1 INTO trigger_to_rm;
  IF NOT done THEN
   -- remove curent trigers
   IF lower(trigger_to_rm) LIKE 'sym_%' THEN
    set @rmquery = concat('DROP TRIGGER ', database_name, '.' , trigger_to_rm);
    PREPARE STMT FROM @rmquery;
    EXECUTE STMT;
   END IF;
  END IF;
 UNTIL done END REPEAT;
 CLOSE cur1;
 END $$
DELIMITER ;

Но MySQL не поддеживаетя такое. Error Code: 1295. This command is not supported in the prepared statement protocol yet

Вариант 2

SELECT CONCAT(database_name, '.' ,TRIGGER_NAME) INTO trigger_name_for_db  
    FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = database_name 
        AND EVENT_OBJECT_TABLE = table_name ;

DROP TRIGGER   trigger_name_for_db;

Но переменные не подставляются для drop table нужна именно строка, ошибка:

Trigger not exists.

READ ALSO
Как установить MySQL 8.0 (8.0.15+) на Ubuntu 18.04 [так же для DigitalOcean]

Как установить MySQL 8.0 (8.0.15+) на Ubuntu 18.04 [так же для DigitalOcean]

У меня возникла проблема: Который раз пытаюсь установить MySQL на Ububtu-server (1804) и постоянно какие-то ошибки

99
Изменение текста в PSD средствами php

Изменение текста в PSD средствами php

столкнулся со следующей задачей: Необходимо автоматизировать печать сертификата, в котором уникальные (имя, промокод, и даты действия сертификата)Сертификат...

126