Mi almacenamiento INNODB,
Estoy tratando de crear un trigger con 2 consultas en CASO de declaración.
Abajo se puede ver el gatillo que me da el error de

delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
  FOR EACH ROW BEGIN
    UPDATE counts SET count = count - 1 WHERE name = 'all';

    IF OLD.published = 1 THEN
        DELETE FROM videos_categories WHERE id_video = OLD.id;
        DELETE FROM videos_tags WHERE id_video = OLD.id;
    END IF;
  END;
|
delimiter ;

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= OLD.id;
    END IF;
  END' at line 6

Esto son los 2 factores desencadenantes que puedo activar con el primero.

delimiter |
CREATE TRIGGER count_delete_videos_tags AFTER DELETE ON videos_tags
  FOR EACH ROW BEGIN
    UPDATE tags SET count = count - 1 WHERE id = OLD.id_tag;
  END;
|
delimiter ;


delimiter |
CREATE TRIGGER count_delete_videos_categories AFTER DELETE ON videos_categories
  FOR EACH ROW BEGIN
    UPDATE categories SET count = count - 1 WHERE id = OLD.id_category;

    IF OLD.id_category <> 20 AND OLD.id_category <> 34 THEN
        UPDATE counts SET count=count-1 WHERE name='english';
    ELSEIF OLD.id_category = 34 THEN
        UPDATE counts SET count=count-1 WHERE name='german';
    ELSEIF OLD.id_category = 20 THEN
        UPDATE counts SET count=count-1 WHERE name='italian';
    END IF;
  END;
|
delimiter ;

Pero este funciona a la perfección

delimiter |
    CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
      FOR EACH ROW BEGIN
        UPDATE counts SET count = count - 1 WHERE name = 'all';

        IF OLD.published = 1 THEN
            DELETE FROM videos_categories WHERE id_video = OLD.id;
        END IF;
      END;
    |
    delimiter ;

Query OK, 0 rows affected (0.16 sec)

¿Cómo puedo hacer el primer gatillo de trabajo? lo que estoy haciendo mal?
Thx por ayudarme.

podría usted dar el si la cláusula dos veces para cada instrucción delete y ver?
(Excepto para los contadores), ¿sabe usted que usted puede tener el mismo comportamiento, con una restricción Foreign Key (uno de cada tabla) a la video tabla, mediante la definición de la FKs con ON DELETE CASCADE?
sí, lo sé, pero en foreing keys de triggers en mysql no se activan, por lo que deben eliminar con otro desencadenador para esto consultas activar otros desencadenantes

OriginalEl autor Alex Prut | 2012-04-29

1 Comentario

  1. 16

    Como lo que puedo decir que ambos son los desencadenantes de ACEPTAR, pero usted puede tratar el siguiente:

    DELIMITER $$
    CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
    FOR EACH ROW 
    BEGIN
      UPDATE counts SET count = count - 1 WHERE name = 'all';
    
      IF OLD.published = 1 THEN BEGIN
        DELETE FROM videos_categories WHERE id_video = OLD.id;
        DELETE FROM videos_tags WHERE id_video = OLD.id;
      END; END IF;
    END$$
    
    DELIMITER ;
    Esto es lo que me pasa -> ERROR 1235 (42000): Esta versión de MySQL no soporta todavía ‘múltiples disparos con el mismo tiempo de la acción y evento para una mesa’
    ¿Y cuál es tu versión de MySQL?
    obviamente, usted tendrá que borrar el otro gatillo antes de la adición de este.
    he editado mi post. He explicado mejor mi problema, por favor, eche un vistazo. Thx
    OK, problema resuelto. El problema era que yo tenía de acción 2 desencadenar en la misma tabla.

    OriginalEl autor Johan

Dejar respuesta

Please enter your comment!
Please enter your name here