트리거는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!