2012-02-04 3 views
1

데이터베이스는 MySQL입니다. 새 평가가 배치 될 때마다 집계 평가 테이블을 업데이트하는 트리거를 구현하려고합니다. 그런 다음 트리거를 구현하려는 다른 유사한 사용 사례가 있습니다.PHP 스크립트가 MySql 트리거가 완료 될 때까지 기다려야합니까?

이러한 트리거는 연합 테이블을 업데이트 할 수 있습니다. 그래서 내 질문은 : 새 등급을 삽입하는 PHP 스크립트는 PHP 스크립트가 완료되기 전에 트리거가 완료 될 때까지 기다려야합니까?

추신 : 로직을 적용하는 것은 좋은 생각이 아니므로 RabbitMQ과 같은 메시징을 사용하는 것이 더 나을 것 같습니다.

+1

내 직관은 트리거가 실행될 때까지 기다릴 필요가 없다는 것을 알려주지 만 연결에 대해 다른 쿼리를 실행하려는 경우 수행합니다. 즉, 트리거를 사용하지 않았으므로 답변으로 게시 할 수 없습니다. –

+0

AFTER INSERT 트리거를 의미한다고 생각합니까? –

+0

집계 테이블을 비동기 적으로 업데이트하려면 cron 스크립트 나 gearman/rabbitmq/zeromg 메시징 시스템을 사용하여 업데이트 스크립트를 실행하는 것이 더 나은 해결책이 될 수 있습니다. –

답변

8

트리거는 동기식입니다. 트리거를 실행하는 모든 액션 (및 액션에 의해 생성 된 모든 후속 트리거)을 포함하여 트리거가 실행 완료 될 때까지 트리거 된 INSERT/UPDATE/DELETE가 차단됩니다.

트리거는 원자 적입니다. 즉, 트리거에 의해 실행 된 변경이 실패하면 트리거가 실패하고 트리거를 생성 한 변경 사항을 취소합니다.

트리거는 트리거를 생성 한 동일한 트랜잭션의 범위를 변경합니다. 따라서 트리거에 의한 변경 사항은 트리거를 생성 한 변경 사항과 함께 커밋되거나 롤백 될 수 있습니다. PHP 애플 리케이션이 트랜잭션을 끝내고 종료하는 동안 트리거가 계속 실행되면 트랜잭션에서 트랜잭션이 발생하지 않도록 할 수 없습니다.

이는 BEFORE 트리거와 AFTER 트리거 모두에 적용됩니다. 모든 트리거가 완료 될 때까지 앱이 차단됩니다.

+0

그런 좋은 설명에 감사드립니다. –