I'm having trouble with calculating a derived value using a combination of triggers and foreign key constraints.

There are 3 tables involved in this arrangement


    responses
    ------------------------
    id_responses
    text
    n_comments


    responses_has_comments 
    ------------------------
    id_responses
    id_comments


    comments
    ------------------------
    id_comments
    text

the link table - reviews_has_comments (rhc) exists because comments can be added to several other types of content.

A cascading foreign key constraint on **rhc** removes rows when a **comment** or **response** has been deleted. This is working as expected. I have written a trigger to increment/decrement **n_comments** on **responses** when a change occurs in **rhc**. 

The incrementing trigger is working fine, but the decrementing trigger is not. Here are the triggers. 

    CREATE TRIGGER `inc_n_comments_in_responses`
        AFTER INSERT ON `responses_has_comments` FOR EACH ROW
            BEGIN   
                UPDATE responses
                SET n_comments = n_comments + 1
                WHERE id_responses = NEW.id_responses;

            END;
     $$

     CREATE TRIGGER `dec_n_comments_in_responses`
        AFTER DELETE ON `responses_has_comments` FOR EACH ROW
            BEGIN
                UPDATE responses
                SET n_comments = n_comments - 1
	        WHERE id_responses = OLD.id_responses;
        END;
    $$

Can anyone cast their eye over this and point me in the right direction? As I understand it, the BEFORE and AFTER commands happen before and after the CASCADE.