mysql에서 트리거는 삽입, 업데이트, 삭제 등 테이블과 관련된 이벤트가 발생할 때마다 실행되거나 실행되는 데이터베이스 카탈로그에 저장된 SQL 문 집합입니다. 트리거는 데이터 테이블과 밀접하게 관련되어 있으며 주로 테이블의 데이터를 보호하는 데 사용됩니다. 특히 특정 상호 연결이 있는 여러 테이블이 있는 경우 트리거는 서로 다른 테이블에서 데이터 일관성을 유지할 수 있습니다. MySQL에서는 INSERT, UPDATE, DELETE 작업을 실행할 때만 트리거가 활성화될 수 있으며, 다른 SQL 문에서는 트리거가 활성화되지 않습니다.
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
mysql의 트리거
mysql에서 트리거는 테이블과 관련된 이벤트가 발생할 때마다 삽입, 업데이트 또는 실행되는 SQL 문 집합입니다. 삭제.
MySQL 트리거는 저장 프로시저와 마찬가지로 MySQL에 포함된 프로그램이며 MySQL의 데이터 관리를 위한 강력한 도구입니다. 차이점은 저장 프로시저를 실행하려면 CALL 문이 필요하지만, 트리거를 실행하려면 CALL 문이나 수동 시작이 필요하지 않고 대신 데이터 테이블에 대한 관련 작업을 통해 트리거되고 활성화되어 실행됩니다. 예를 들어, 학생 테이블에서 작업(INSERT, DELETE 또는 UPDATE)이 수행되면 해당 실행이 활성화됩니다.
트리거는 데이터 테이블과 밀접한 관련이 있으며 주로 테이블의 데이터를 보호하는 데 사용됩니다. 특히 서로 관련된 여러 테이블이 있는 경우 트리거는 여러 테이블에서 데이터의 일관성을 유지할 수 있습니다.
MySQL에서는 INSERT, UPDATE 및 DELETE 작업을 실행할 때만 트리거가 활성화될 수 있으며, 다른 SQL 문은 트리거를 활성화하지 않습니다.
그렇다면 트리거를 사용하는 이유는 무엇일까요? 예를 들어 실제로 프로젝트를 개발하다 보면 다음과 같은 상황을 자주 접하게 됩니다.
학생 테이블에 학생에 대한 기록을 추가할 때 총 학생 수도 동시에 변경되어야 합니다.
학생 기록을 추가할 때 연령이 범위 요구 사항을 충족하는지 확인해야 합니다.
학생 정보 삭제 시 성적표에서 해당 기록을 삭제해야 합니다.
데이터 삭제 시 데이터베이스 아카이브 테이블에 백업 복사본을 보관해야 합니다.
위 상황에서 구현된 비즈니스 로직은 다르지만 모두 데이터 테이블이 변경되면 일부 처리를 자동으로 수행해야 합니다. 이때 트리거 처리를 사용할 수 있습니다. 예를 들어 첫 번째 경우에는 트리거 개체를 생성하고 학생 기록이 추가될 때마다 총 학생 수를 계산하는 작업을 수행할 수 있습니다. 학생 기록의 수가 일관되게 계산됩니다.
MySQL에서 지원하는 트리거
실제 사용에서 MySQL은 INSERT 트리거, UPDATE 트리거, DELETE 트리거의 세 가지 트리거를 지원합니다.
1) INSERT 트리거
INSERT 문 실행 전후에 응답하는 트리거입니다.
INSERT 트리거를 사용할 때 다음 사항에 주의해야 합니다.
INSERT 트리거 코드에서 NEW(대소문자 구분 없음)라는 가상 테이블을 참조하여 삽입된 행에 액세스할 수 있습니다.
BEFORE INSERT 트리거에서는 NEW의 값도 업데이트할 수 있으며, 이를 통해 삽입된 값을 변경할 수 있습니다(해당 작업 권한이 있는 경우).
AUTO_INCREMENT 열의 경우 NEW에는 INSERT가 실행되기 전에 값 0이 포함되고, INSERT가 실행된 후에 자동으로 생성된 새로운 값이 포함됩니다.
2) UPDATE 트리거
UPDATE 문이 실행되기 전후에 응답하는 트리거입니다.
UPDATE 트리거를 사용할 때 다음 사항에 주의해야 합니다.
UPDATE 트리거 코드 내에서 NEW(대소문자 구분 안 함)라는 가상 테이블을 참조하여 업데이트된 값에 액세스할 수 있습니다.
UPDATE 트리거 코드 내에서는 OLD(대소문자 구분 없음)라는 가상 테이블을 참조하여 UPDATE 문이 실행되기 전 값에 접근할 수 있습니다.
BEFORE UPDATE 트리거에서는 NEW의 값도 업데이트될 수 있으며, 이를 통해 UPDATE 문에 사용되는 값을 변경할 수 있습니다(해당 작업 권한이 있는 경우).
OLD의 모든 값은 읽기 전용이며 업데이트할 수 없습니다.
참고: 트리거가 테이블 자체의 업데이트 작업을 트리거하도록 설계된 경우 BEFORE 유형 트리거만 사용할 수 있으며 AFTER 유형 트리거는 허용되지 않습니다.
3) DELETE 트리거
DELETE 문이 실행되기 전후에 응답하는 트리거입니다.
DELETE 트리거를 사용할 때 다음 사항에 주의해야 합니다.
DELETE 트리거 코드 내에서 OLD(대소문자 구분 안 함)라는 가상 테이블을 참조하여 삭제된 행에 액세스할 수 있습니다.
OLD의 모든 값은 읽기 전용이며 업데이트할 수 없습니다.
일반적으로 트리거를 사용하는 동안 MySQL은 다음과 같은 방식으로 오류를 처리합니다.
트랜잭션 테이블의 경우 트리거 프로그램이 실패하고 결과 전체 문이 실패하면 문에 의해 수행된 모든 변경 사항이 비트랜잭션 테이블에 대해 롤백됩니다. 문이 실패하더라도 이러한 롤백을 수행할 수 없습니다. 오류가 발생하기 전에 발생한 오류는 여전히 유효합니다.
BEFORE 트리거가 실패하면 MySQL은 해당 행에서 작업을 수행하지 않습니다.
BEFORE 또는 AFTER 트리거 프로그램 실행 중에 오류가 발생하면 트리거 프로그램을 호출하는 전체 명령문이 실패하게 됩니다.
MySQL은 BEFORE 트리거와 행 작업이 모두 성공적으로 실행된 경우에만 AFTER 트리거를 실행합니다.
【관련 추천: mysql 비디오 튜토리얼】
위 내용은 mysql의 트리거 란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!