>  기사  >  데이터 베이스  >  MySQL 트리거를 작성하는 방법

MySQL 트리거를 작성하는 방법

(*-*)浩
(*-*)浩원래의
2019-05-17 11:08:5616827검색

트리거는 MySQL 데이터 테이블과 관련된 데이터베이스 개체입니다. 정의된 조건이 충족되면 트리거되고 트리거에 정의된 일련의 명령문이 실행됩니다. 이 트리거 기능은 애플리케이션이 데이터베이스 측에서 데이터 무결성을 보장하는 데 도움이 될 수 있습니다.

MySQL 트리거를 작성하는 방법

구문 형식은 다음과 같습니다.

CREATE <触发器名> < BEFORE | AFTER >
<INSERT | UPDATE | DELETE >
ON <表名> FOR EACH Row<触发器主体>

구문 설명은 다음과 같습니다.

1) 트리거 이름

트리거 이름, 트리거는 현재 데이터베이스에서 고유한 이름을 가져야 합니다. 특정 데이터베이스에서 생성하는 경우 이름 앞에 데이터베이스 이름이 와야 합니다.

2) INSERT | UPDATE | DELETE

트리거 이벤트는 트리거를 활성화하는 문 유형을 지정하는 데 사용됩니다.

참고: 세 가지 트리거의 실행 시간은 다음과 같습니다. INSERT: 새 행이 테이블에 삽입되면 트리거가 활성화됩니다. 예를 들어, INSERT의 BEFORE 트리거는 MySQL의 INSERT 문뿐만 아니라 LOAD DATA 문으로도 활성화될 수 있습니다. DELETE: DELETE 및 REPLACE 문과 같이 테이블에서 데이터 행이 삭제되면 트리거가 활성화됩니다. UPDATE: UPDATE 문과 같이 테이블의 데이터 행이 변경되면 트리거가 활성화됩니다.

3) BEFORE | AFTER

BEFORE 및 AFTER는 트리거가 실행되는 순간 트리거가 실행되는 문 이전 또는 이후에 실행되는지를 나타냅니다. 새 데이터가 조건을 충족하는지 확인하려면 BEFORE 옵션을 사용하고, 트리거를 활성화하는 문이 실행된 후 여러 가지 변경 사항을 완료하려면 일반적으로 AFTER 옵션을 사용합니다.

4) 테이블 이름

트리거와 연결된 테이블 이름입니다. 이 테이블은 영구 테이블이어야 합니다. 트리거는 임시 테이블이나 뷰와 연결할 수 없습니다. 테이블에 트리거 이벤트가 발생하면 트리거가 활성화됩니다. 동일한 테이블에는 실행 시간과 이벤트가 동일한 두 개의 트리거가 있을 수 없습니다. 예를 들어, 데이터 테이블의 경우 두 개의 BEFORE UPDATE 트리거를 동시에 가질 수는 없지만 BEFORE UPDATE 트리거와 BEFORE INSERT 트리거 또는 BEFORE UPDATE 트리거와 AFTER UPDATE 트리거는 가질 수 있습니다.

5) 트리거 본문

트리거 작업 본문에는 트리거가 활성화될 때 실행될 MySQL 문이 포함되어 있습니다. 여러 문을 실행하려면 BEGIN…END 복합 문 구조를 사용할 수 있습니다.

6) FOR EACH ROW

는 일반적으로 행 수준 트리거링을 의미하며, 트리거 이벤트의 영향을 받는 각 행에 대해 트리거 작업이 활성화되어야 합니다. 예를 들어, INSERT 문을 사용하여 여러 데이터 행을 테이블에 삽입하는 경우 트리거는 삽입된 각 데이터 행에 대해 해당 트리거 동작을 실행합니다.

참고: 각 테이블은 INSERT, UPDATE 및 DELETE의 BEFORE 및 AFTER를 지원하므로 각 테이블은 최대 6개의 트리거를 지원합니다. 테이블별 이벤트당 한 번에 하나의 트리거만 허용됩니다. 단일 트리거는 여러 이벤트 또는 여러 테이블과 연결될 수 없습니다.

또한 MySQL에서 데이터베이스의 기존 트리거를 확인해야 하는 경우 SHOW TRIGGERS 문을 사용할 수 있습니다.

예:

BEGIN    
IF new.state  in ('2','3')  then  
  INSERT INTO `userservice`.`ehome_us_green_examine` 
(modifydate,modifyuser,brancCode,stateDescription,state,
userID,fromSystemkey,applydate,makeHospitalName,illnessName,
userName,rightsholderName,tranno) 
VALUES ( sysdate(), 'manage', old.brancCode, old.stateDescription, new.state, 
'', old.fromSystemkey, old.applydate,old.makeHospitalName,old.illnessName,
old.userName,old.rightsholderName, old.tranno);
END IF;  
END

이 트리거는 비교적 간단합니다.

1. BEGIN에서 END는 데이터베이스에 대한 작업입니다.

2. 당신 말이 맞습니다. . .

3. new.state in ('2','3') 이 문장의 의미: 테이블의 필드 상태가 (2 또는 3)인 경우

4 다음 insert 문을 실행하면 new는 New입니다. value, old는 원래 값입니다(예: old.userName은 이 필드의 원래 값입니다).

5. 전체 트리거는 모국어로 변환되며, 테이블의 상태가 2 또는 3이 되면 다음 삽입 문을 실행합니다.

Remarks: 그러면 트리거는 상태 변경 이전에 발생합니까, 아니면 이후에 발생합니까? 이름에서 알 수 있듯이 이전 또는 이후를 선택하세요!

위 내용은 MySQL 트리거를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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