>데이터 베이스 >MySQL 튜토리얼 >예제를 통해 설명되는 MySQL 트리거: 데이터베이스 작업 자동화

예제를 통해 설명되는 MySQL 트리거: 데이터베이스 작업 자동화

Susan Sarandon
Susan Sarandon원래의
2024-12-20 16:15:13983검색

MySQL Triggers Explained with Examples: Automating Database Actions

예제를 통해 설명되는 MySQL 트리거: 데이터베이스 작업 자동화

MySQL 트리거INSERT, UPDATE와 같은 테이블의 특정 이벤트에 대한 응답으로 데이터베이스에서 지정된 작업을 자동으로 실행할 수 있는 강력한 기능입니다. 또는 삭제. 트리거는 애플리케이션 코드에서 이러한 작업을 명시적으로 관리할 필요 없이 비즈니스 규칙을 적용하고, 데이터 무결성을 유지하거나 변경 사항을 기록하는 데 유용합니다.

이 가이드에서는 트리거가 무엇인지, 어떻게 작동하는지 살펴보고 MySQL에서의 사용법을 이해하는 데 도움이 되는 실용적인 예를 제공합니다.


MySQL 트리거란 무엇입니까?

트리거는 테이블에서 특정 이벤트가 발생할 때 MySQL에 의해 자동으로 실행(또는 "트리거")되는 SQL 문 집합입니다. 이벤트는 다음 중 하나일 수 있습니다.

  • INSERT: 삽입 작업 후에 트리거됩니다.
  • UPDATE: 업데이트 작업 후에 트리거됩니다.
  • DELETE: 삭제 작업 후에 트리거됩니다.

이벤트 이전 또는 이후 실행되도록 트리거를 정의할 수 있으므로 데이터 처리 방법을 유연하게 선택할 수 있습니다.

트리거 생성 구문

MySQL에서 트리거를 생성하는 일반적인 구문은 다음과 같습니다.

CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;
  • Trigger_name: 트리거의 이름입니다.
  • Trigger_time: 이벤트 이전 또는 이후일 수 있습니다.
  • Trigger_event: INSERT, UPDATE 또는 DELETE일 수 있습니다.
  • table_name: 트리거가 연결된 테이블의 이름입니다.
  • Trigger_body: 트리거가 실행될 때 실행될 SQL 문입니다.

트리거 타이밍: BEFORE vs. AFTER

  • 트리거 전: 트리거 작업은 트리거 이벤트 이전(예: 삽입, 업데이트 또는 삭제 작업 전)에 실행됩니다. 이를 통해 데이터가 테이블에 커밋되기 전에 수정할 수 있습니다.

  • AFTER Trigger: 트리거 작업은 이벤트 이후(예: 레코드가 삽입, 업데이트 또는 삭제된 후) 실행됩니다. 이는 로깅과 같이 데이터 변경 사항에 따라 작업을 수행하려는 경우에 유용합니다.


MySQL 트리거의 예

1. 삽입 트리거 예시: 기본값 자동 설정

created_at 열을 포함하여 직원 정보가 포함된 직원이라는 테이블이 있다고 가정해 보겠습니다. AFTER INSERT 트리거를 생성하여 새 레코드가 삽입될 때 Create_at 필드를 현재 타임스탬프로 자동으로 설정할 수 있습니다.

CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;

이 예에서는:

  • 직원 테이블에서 AFTER INSERT 트리거가 실행됩니다.
  • NEW 키워드는 새로 삽입된 행을 참조하는 데 사용됩니다. NEW.id는 새로 삽입된 행의 ID를 나타냅니다.
  • 트리거는 새로 삽입된 레코드의 Created_at 열을 현재 타임스탬프로 업데이트합니다.

2. 업데이트 트리거 예: 업데이트된 값을 자동으로 계산

가격 및 할인 열이 있는 제품 테이블을 상상해 보세요. 가격이 업데이트될 때마다 할인 가격 필드를 자동으로 업데이트하려고 합니다.

CREATE TRIGGER set_created_at
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
    UPDATE employees SET created_at = NOW() WHERE id = NEW.id;
END;

이 예에서는:

  • 제품 테이블에서 AFTER UPDATE 트리거가 실행됩니다.
  • NEW.price는 업데이트된 가격을 의미하고, OLD.price는 이전 값을 의미합니다.
  • 가격이 변경된 경우(NEW.price <> OLD.price) 트리거는 새 가격과 할인을 기준으로 할인 가격을 업데이트합니다.

3. 삭제 트리거 예시: 중요 데이터 삭제 방지

트리거를 사용하여 특정 행 삭제 방지와 같은 비즈니스 규칙을 시행할 수 있습니다. 예를 들어 직원 테이블에서 중요 직원으로 표시된 직원이 삭제되지 않도록 할 수 있습니다.

CREATE TRIGGER update_discounted_price
AFTER UPDATE ON products
FOR EACH ROW
BEGIN
    IF NEW.price <> OLD.price THEN
        UPDATE products SET discounted_price = NEW.price * (1 - NEW.discount / 100) WHERE id = NEW.id;
    END IF;
END;




<p>이 예에서는:</p>

<ul>
<li>직원 테이블에서 <strong>삭제 전</strong> 트리거가 실행됩니다.</li>
<li>OLD 키워드는 삭제되기 전 행의 데이터를 의미합니다.</li>
<li>is_tical 열이 1로 설정된 경우 트리거는 SIGNAL 문을 사용하여 오류를 발생시켜 삭제를 방지합니다.</li>
</ul>

<h4>
  
  
  4. <strong>트리거 삽입 예시: 감사 로그 생성</strong>
</h4>

<p>트리거는 테이블 삽입에 대한 감사 로그를 유지하는 등 로깅 목적으로 사용될 수 있습니다. 다음은 직원 테이블에 추가된 모든 새 직원을 audit_log 테이블에 기록하는 예입니다.<br>
</p>

<pre class="brush:php;toolbar:false">CREATE TRIGGER prevent_delete_critical_employee
BEFORE DELETE ON employees
FOR EACH ROW
BEGIN
    IF OLD.is_critical = 1 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete critical employee';
    END IF;
END;

이 예에서는:

  • 직원 테이블에서 AFTER INSERT 트리거가 실행됩니다.
  • 트리거는 audit_log 테이블에 레코드를 삽입하여 작업(INSERT), 테이블 이름(employees), 삽입된 직원의 ID(NEW.id) 및 타임스탬프(NOW())를 기록합니다.

트리거 관리

  • 트리거 보기: information_schema.triggers 테이블을 쿼리하여 데이터베이스의 기존 트리거를 볼 수 있습니다.
CREATE TRIGGER trigger_name
    trigger_time trigger_event
    ON table_name
    FOR EACH ROW
    trigger_body;
  • 트리거 삭제: 트리거가 더 이상 필요하지 않은 경우 DROP TRIGGER 문을 사용하여 삭제할 수 있습니다.
CREATE TRIGGER set_created_at
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
    UPDATE employees SET created_at = NOW() WHERE id = NEW.id;
END;

트리거 사용 시 고려 사항

  1. 성능에 미치는 영향: 트리거는 추가 SQL 문을 실행하므로 데이터베이스 작업에 오버헤드를 추가합니다. 특히 대규모 테이블이나 빈번한 작업의 경우 트리거 논리가 얼마나 복잡한지 염두에 두십시오.

  2. 트리거 중첩: 동일한 테이블을 수정하는 트리거에 주의하세요. 이렇게 하면 무한 루프나 과도한 리소스 사용이 발생할 수 있습니다. MySQL은 트리거가 스스로를 직접 호출하는 것을 허용하지 않습니다(재귀 트리거).

  3. 데이터 무결성: 트리거는 원하지 않는 삭제를 방지하는 등 데이터 무결성을 보장하는 데 유용하지만 디버깅하기 어려울 수 있습니다. 항상 트리거 논리가 잘 문서화되어 있는지 확인하세요.

  4. 트리거 테스트: 의도하지 않은 부작용이 애플리케이션 성능이나 비즈니스 로직에 영향을 미칠 수 있으므로 프로덕션에 배포하기 전에 항상 개발 또는 스테이징 환경에서 트리거를 철저히 테스트하세요.

결론

MySQL 트리거는 삽입, 업데이트, 삭제 등 데이터베이스 변경에 대한 응답으로 작업을 자동화하는 강력한 기능입니다. 트리거를 사용하면 비즈니스 규칙을 적용하고 데이터 무결성을 유지하며 감사 또는 로깅과 같은 작업을 자동화할 수 있습니다. 그러나 성능에 미치는 영향을 신중하게 고려하고 시스템 성능에 부정적인 영향을 미치지 않도록 트리거를 신중하게 구현하는 것이 중요합니다.


위 내용은 예제를 통해 설명되는 MySQL 트리거: 데이터베이스 작업 자동화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.