2012-02-15 5 views
-1

현재 다음과 같은 MySQL 쿼리가 있습니다.이 쿼리는 별도의 쿼리가 아닌 트리거에 포함하고 싶습니다. 두 테이블을 조회하는 업데이트 데이터가 결합 가능한 위치 :INSERT 트리거에서 두 테이블의 조인 된 행 업데이트

UPDATE `testing_names` INNER JOIN `purchase_names` 
    ON `testing_names`.`fulldomain` = `purchase_names`.`fulldomain` 
SET 
    `testing_names`.`account_id` = `purchase_names`.`account_id`, 
    `purchase_names`.`purchase_status` = 1 
WHERE `purchase_names`.`purchase_status` = 0 

행이 testing_names 삽입 (별도)이다. 이 행에는 해당 항목이 purchase_names에 있어야합니다 (SHOULD). testing_names에 행을 삽입 한 후 다음에 내 UPDATE 쿼리를 실행하면 testing_names.account_id을 업데이트하고 purchase_names.purchase_status을 업데이트하면이 작업을 효과적으로 마친 것으로 표시합니다.

이것을 트리거의 일부로 실행하는 것이 좋지만 작업을 수행하는 트리거를 만들 수 없었습니다.

지금까지, 나는 성공적으로 트리거를 만들었습니다

DELIMITER $$ 
    CREATE TRIGGER `my_trigger` AFTER INSERT 
    ON testing_names 
     FOR EACH ROW BEGIN 
     UPDATE `testing_names` INNER JOIN `purchase_names` 
      ON `testing_names`.`fulldomain` = `purchase_names`.`fulldomain` 
     SET 
      `testing_names`.`account_id` = `purchase_names`.`account_id`, 
      `purchase_names`.`purchase_status` = 1 
     WHERE `purchase_names`.`purchase_status` = 0; 
     END$$ 
DELIMITER ; 

하지만 분명 행을 삽입 할 때, 나는 오류 얻을 수 있기 때문에 새로운 UPDATE 쿼리가 허용되지 않습니다 실행 : 불행하게도 #1442 - Can't update table 'testing_names' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

답변

1

을, 테이블에 대한 트리거는 동일한 테이블을 갱신 할 수 없습니다. MySQL documentation에서

:

Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.

대신 testing_names 업데이트 purchase_names에 트리거를 가진하여 업데이트를 완료하고 purchase_names 업데이트 testing_names 다른 트리거를 가질 수 있습니다.

+0

감사합니다. 상호 업데이트 트리거로도 가능하지는 않습니다. 나는'testing_names' BEFORE INSERT 트리거를 사용하여'testing_names'를 조정하는 방법을 찾고 있습니다. 그런 다음 AFTER INSERT를 사용하여'purchase_names'를 조정하십시오. 그것은'오류가 발생했다고 믿는'purchase_names' AFTER UPDATE 트리거에 대한 필요성을 부정해야합니다. – SimonMayer

+0

추가 정보로서 BEGIN ... END 내부의'purchase_names' 테이블에서 SELECT 및 UPDATE 문을 실행하여'testing_names'에 대한 BEFORE INSERT 트리거의 일부로 모든 것을 할 수있었습니다. – SimonMayer

0

대신에 INSERT를 사용해보십시오

관련 문제