>백엔드 개발 >PHP 튜토리얼 >MySQL 트리거를 사용한 액션 자동화

MySQL 트리거를 사용한 액션 자동화

William Shakespeare
William Shakespeare원래의
2025-02-25 17:52:09180검색

Action Automation with MySQL Triggers

코어 포인트

MySQL 트리거는 데이터베이스 쿼리, 파일 작업 및 데이터 처리와 같은 자동화 된 작업으로 PHP 프로젝트를 단순화합니다. 테이블에서 동작 전후에 자동으로 호출됩니다 (삽입, 업데이트, 삭제).

트리거는 MySQL 버전 5.0.2에 도입되었으며 해당 권한을 생성해야합니다. 데이터베이스에는 생성 된 고유 한 이름이 있어야하며 원래 SQL 문이 실행될 때만 해고됩니다.
    트리거는 테이블 세트의 무결성을 유지하고, 새로운 인서/삭제가있을 때 통계 테이블을 자동으로 증가 또는 감소시키고, 데이터베이스 내 데이터의 변경을 기록하고, 테이블을 다른 테이블과 동기화합니다.
  • MySQL 트리거는 웹 사이트 성능에 긍정적 인 영향을 줄 수 있으며 개발자가 운영을 처리하기 위해 많은 PHP 코드를 작성하지 않도록 할 수 있습니다. 특정 데이터 변경에 응답하는 작업을 자동으로 수행하는 데 사용할 수 있습니다.
  • 우리가 쓴 많은 코드는 작업을 수행하는 것입니다. 데이터베이스 쿼리, 파일 작업, 데이터 처리 등이든,이 모든 것은 스크립트가 의도 한 목적을 달성 할 수 있도록하는 것입니다. 그러나 이전 작업을 확인하기 위해 때때로 작성 해야하는 코드가 얼마나 필요한지 알았습니까? 최근 프로젝트 중 하나는 다소 번거로운 문제와 관련이 있었으며, 그로 인해 모든 데이터가 각 작업 후에 내 테이블에 동기화되도록하기 위해 수많은 쿼리를 사용하게되었습니다. 이것은 우아하지 않으며 상당히 간단한 스크립트 였지만 복잡한 쿼리 페이지가되었습니다. 유지 보수 관점에서 볼 때 이것은 실현 가능하지 않으며 페이지 기능의 일부를 업데이트하고 싶을 때 악몽입니다. MySQL 트리거가 내 프로젝트에 들어가는 것은 여기에 있습니다. MySQL이 트리거로 더 많은 작업을 수행하도록함으로써 내 프로젝트의 PHP 측면은 크게 단순화됩니다. 따라서이 기사의 목적은 MySQL 트리거의 생성 및 사용에 대한 더 깊은 이해를 제공하여 독서가 끝날 때 자신의 프로젝트에서 사용할 수 있도록하는 것입니다.
  • MySQL 트리거는 무엇입니까?
  • 트리거는 MySQL 버전 5.0.2에 소개되었으며 개발자로서의 작업을 단순화하는 데 도움이되는 MySQL의 추가 기능 중 하나 일뿐입니다. 테이블에서 동작 전후에 자동으로 호출됩니다 (삽입, 업데이트, 삭제). 트리거를 만들려면 적절한 권한이 있어야합니다. MySQL 5.1.6 이전에는 초 권한이 필요했지만 5.1.6에는 변경되었고 트리거 권한이 필요했습니다. 일반적으로 공유 호스팅 계획은 쉽게 남용되기 때문에 Super를 허용하지 않으므로 사용 방법에 따라 (가상) 전용 서버 또는 로컬 호스트와 같은 더 많은 권한이있는 서버에서만 사용할 수 있습니다. MySQL 버전. 트리거에 대한 다른 빠른 지침은 다음과 같습니다

    두 테이블을 설정 한 후 CostCalc라는 트리거를 계속 만들 수 있습니다. 이벤트 테이블에서 업데이트가 발생한 후 트리거가 발사 된 다음 위에서 언급 한 계산을 수행합니다. 그런 다음 수익 목록을 삽입하거나 업데이트합니다 (기존 이벤트 ID가 설정된 경우).

    <code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
    FOR EACH ROW
    BEGIN
         #action(s) to perform
    END</code>
    트리거 (이벤트 및 저장된 루틴과 유사)를 만들 때 가장 먼저해야 할 일은 트리거의 끝을 나타내는 새로운 구분기를 지정하는 것입니다. 이는 Delimiter 키워드를 사용하여 수행 한 다음 사용자 정의 기호 (또는 기호)를 사용하여 MySQL이 아니라 내부 명령문 만 실행하는 대신 트리거를 전체적으로 실행해야합니다. 그런 다음 트리거의 이름, 시간, 이벤트 및 트리거로 설정 될 테이블을 지정합니다. 이 예에서는 업데이트가 발생한 후 트리거의 시간을 설정했습니다. 그렇지 않으면 트리거를 실행하려면 이전의 이전 레코드를 반복합니다. 다음으로, 우리는 시작 ... End Compound 문을 사용하여 트리거의 기능을 수용합니다. 트리거의 본문은 먼저 두 가지 변수의 행과 시간을 선언합니다. 우리는 이벤트 테이블에서 행의 수를 선택합니다. 여기서 ID는 방금 수정 된 행을 말하고 event_start 및 event_end 시간의 1 개 (또는 2 개)가 수정되었으며 event_end 시간은 0과 같지 않습니다. 임대료는 이러한 변경을 통해서만 계산할 수 있으므로 손익 계산서에 필요한 조치가 필요한지 여부를 명확히하기위한 것입니다. 시간과 비용을 계산할 수 있다는 것을 알게되면 시간 변수가 열의 시작부터 끝까지 분과 동일한 시간 변수를 설정합니다. 이 숫자에 0.5를 곱하면 임대 비용도받을 수 있습니다. event_id 열은 고유하므로 이벤트 테이블에 해당하는 하나의 ID 만 가질 수 있습니다. 따라서 교체를 사용하여 테이블에서 기존 행을 업데이트하거나 새 행을 삽입합니다 (그렇지 않은 경우). MySQL 문에서는 오래된 키워드와 새로운 키워드가 위의 선택 및 대체 명령문에 사용되어 시간 변수 값의 표현식에 사용됩니다. 이 두 키워드의 사용은 상황의 이벤트와 트리거가 트리거 될 때에 따라 다릅니다.

    새로운 키워드는 데이터베이스에 입력하는 들어오는 데이터에 액세스하는 데 사용됩니다. 삽입 및 업데이트 문에서만 사용할 수 있습니다.
      이전 키워드는 레코드를 수정하기 전에 레코드의 현재 데이터에 액세스하는 데 사용됩니다. 업데이트 및 삭제 명령문에서만 사용할 수 있습니다.
    • 트리거를 시작하는 데 사용될 해당 PHP 스크립트에는 클래스 (Eventhandler) 및 클라이언트 호출 코드가 포함됩니다. 클래스는 PDO를 통해 MySQL 데이터베이스에 연결되며 이벤트 컨텐츠를 업데이트해야 할 때 호출되는 메소드 updateEvent ()가 포함됩니다.
    • <code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
      FOR EACH ROW
      BEGIN
           #action(s) to perform
      END</code>
      우리는 먼저 이벤트 핸들러 클래스를 만듭니다. 여기서 속성 $ db가 생성자 메소드에 의해 설정된 PDO 클래스의 인스턴스를 보유하도록 정의됩니다. 그런 다음 3 개의 매개 변수가 정의되는 updateEvent () 메소드를 만들어냅니다. 첫 번째 매개 변수는 이벤트 테이블에서 업데이트 할 열을 지정하고 이름, 시작, 끝의 세 가지 값 중 하나를 허용합니다. 두 번째 매개 변수는 삽입 할 값 또는 업데이트 된 열의 현재 값을 보유하고 있으며 세 번째 매개 변수는 튜플의 ID를 업데이트 할 수 있습니다. 열 이름이 유효한지 확인한 후 매개 변수화 된 쿼리를 통해 테이블을 쿼리하고 최종적으로 행이 업데이트되었는지 확인합니다. 수업을 만든 후에는 계속해서 그것을 호출합니다. PDO 객체의 인스턴스를 이벤트 핸들러 클래스에 매개 변수로 전달합니다. 그런 다음 updateEvent () 메소드는 다른 값으로 4 회 호출되어 트리거가 이벤트 테이블에서 작성된 업데이트에 어떻게 반응하는지 보여줍니다. 처음 두 개의 업데이트는 이벤트 기간 및 임대료를 계산하는 데 필요한 정보가 없기 때문에 트리거 트리거가 행을 삽입하거나 업데이트하지 않습니다. 우리가 한 일은 이벤트 이름을 업데이트하고 시작 시간을 이틀만큼 지연시키는 것입니다. 그러나 다음 두 업데이트에는 첫 번째 업데이트가 종료 시간을 정의하기 때문에 트리거 기능이 필요합니다. 두 번째 업데이트는 1 시간 후에 종료 시간을 재정의하여 기간이 변경되어 임대 비용도 변경되었습니다. 테이블을 만들 때 테이블에 제약 조건을 부과하고 이벤트 ID 당 하나의 레코드 만 가질 수 있기 때문에 교체 명령문이 필요한 곳입니다.

      결론

      MySQL 트리거는 제대로 사용하는 경우 웹 사이트의 성능에 긍정적 인 영향을 줄 수있을뿐만 아니라 그러한 작업을 처리하기 위해 많은 PHP 코드를 작성하지 않도록합니다. 제가 프로젝트에서하는 것처럼 프로젝트에서 유용하다는 것을 알기를 바랍니다. Fotolia의 사진 MySQL 트리거를 사용한 작동 자동화시 FAQ MySQL 트리거는 무엇이며 어떻게 작동합니까?

      MySQL 트리거는 테이블에서 발생하는 이벤트 (예 : 삽입, 업데이트 또는 삭제)에 응답하여 자동으로 호출되는 저장된 프로그램입니다. 트리거는 데이터베이스에서 정보의 무결성을 유지하는 데 사용되며 테이블에서 특정 작업이 발생할 때 자동으로 호출됩니다. 그들은 이벤트 전후에 실행 될 수 있습니다. MySQL 트리거를 만드는 방법은 무엇입니까? MySQL 트리거 생성에는 트리거 이름, 트리거 이벤트 및 이벤트가 발생할 때 실행될 진술이 포함 된 트리거 진술이 포함됩니다. 기본 예는 다음과 같습니다.

      MySQL 트리거에서 PHP 스크립트를 호출 할 수 있습니까? 직접 호출 할 수 없습니다. MySQL은 트리거에서 PHP 스크립트 호출을 지원하지 않습니다. 그러나 UDF (사용자 정의 함수)를 사용하거나 외부 시스템을 사용하여 데이터베이스의 변경 사항을 모니터링 한 다음 PHP 스크립트를 호출하여 간접적으로 수행 할 수 있습니다. MySQL 트리거의 구문은 무엇입니까?

      MySQL에서 트리거를 생성하기위한 구문은 다음과 같습니다.
      <code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
      FOR EACH ROW
      BEGIN
           #action(s) to perform
      END</code>
      MySQL을 사용하여 작업을 자동화하는 방법은 무엇입니까?

      MySQL의 자동화는 트리거, 저장된 절차 및 이벤트를 통해 달성 할 수 있습니다. 트리거를 사용하여 특정 데이터 변경에 응답하여 수행 해야하는 작업을 자동화 할 수 있습니다. 저장된 절차를 통해 일련의 명령을 단일 호출 가능한 루틴으로 캡슐화 할 수 있습니다. 이벤트는 일정에 따라 실행되는 작업입니다.

      MySQL 트리거의 한계는 무엇입니까?

      MySQL 트리거의 일부 제한에는 다음이 포함됩니다. 단일 테이블 만 연결할 수 있고 결과 세트를 반환 할 수 없으며 매개 변수를 허용 할 수 없으며 저장 프로 시저처럼 직접 호출 할 수 없습니다.

      MySQL 트리거를 디버그하는 방법은 무엇입니까?

      디버깅 MySQL 트리거 디버거는 내장 디버거가 없기 때문에 어려울 수 있습니다. 그러나 값을 별도의 테이블에 삽입하여 실행 흐름을 추적하거나 MySQL 디버거와 같은 타사 도구를 사용하는 것과 같은 해결 방법을 사용할 수 있습니다.

      MySQL 트리거 호출 저장 프로 시저를 트리거 할 수 있습니까?

      예. 그러나이 작업을 수행 할 때 조심해야합니다. 관리 및 디버그가 어려운 복잡한 이벤트로 이어질 수 있습니다.

      MySQL 트리거를 삭제하는 방법은 무엇입니까?

      드롭 트리거 문과 트리거 이름을 사용하여 MySQL 트리거를 삭제할 수 있습니다. 예를 들면 :

      MySQL 트리거를 데이터 검증에 사용할 수 있습니까?

      예. 데이터가 테이블에 삽입되었거나 업데이트되는지 확인하고 그에 따라 작업을 수행하는 트리거를 만들 수 있습니다.

위 내용은 MySQL 트리거를 사용한 액션 자동화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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