복붙노트

[SQL] 같은 테이블에 업데이트 후 트리거 테이블 업데이트

SQL

같은 테이블에 업데이트 후 트리거 테이블 업데이트

어떻게 같은 테이블에 업데이트 후 트리거 테이블의 열을 업데이트 할 수 있습니까? 다음 트리거는 다음과 같습니다


CREATE TRIGGER upd_total_votes AFTER UPDATE ON products_score
FOR EACH ROW
    UPDATE
        products_score 
    SET
        products_score.votes_total =
            (SELECT
                 (votes_1 + votes_2 + votes_3 + votes_4 + votes_5)
             FROM
                 products_score
             WHERE
                 id = new.id)

지금과 같은 테이블을 업데이트 할 때


UPDATE products_score SET votes_1 = 5 WHERE id = 0

나는 다음을 얻을으로이 작업을하지 않습니다 :

#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

그래서 나는 일이 어떻게이 땅에서받을 수 있나요?

해결법

  1. ==============================

    1.당신이 전에 대신의 후 트리거를 변경하는 경우는 다음과 같이 그것을 할 수 있습니다 :

    당신이 전에 대신의 후 트리거를 변경하는 경우는 다음과 같이 그것을 할 수 있습니다 :

    CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score 
    FOR EACH ROW 
    BEGIN
        SET new.votes_total = new.votes_1 + new.votes_2 + new.votes_3 + new.votes_4 + new.votes_5 
    END
    ;
    
  2. ==============================

    2.당신은 트리거가에서 같은 테이블에 쿼리하지 않고 다른 행 정의 할 수 있기 때문에이 설정을 가지고이 길을 가질 수 없습니다. 당신은 당신이 원하는 toachieve 업데이트 트리거하기 전에 사용할 수 있습니다 Istead :

    당신은 트리거가에서 같은 테이블에 쿼리하지 않고 다른 행 정의 할 수 있기 때문에이 설정을 가지고이 길을 가질 수 없습니다. 당신은 당신이 원하는 toachieve 업데이트 트리거하기 전에 사용할 수 있습니다 Istead :

    CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW     
    BEGIN
        SET NEW.votes_total = NEW.votes_1 + NEW.votes_2 + NEW.votes_3 + NEW.votes_4 + NEW.votes_5;
    END;
    

    또는 테이블을 업데이트하는 저장 프로 시저를 사용합니다.

  3. from https://stackoverflow.com/questions/4547465/updating-table-in-trigger-after-update-on-the-same-table by cc-by-sa and MIT license