• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    1. ALTER DATABASE 구문
    2. ALTER EVENT 구문
    3. ALTER LOGFILE GROUP 구문
    4. ALTER FUNCTION 구문
    5. ALTER PROCEDURE 구문
    6. ALTER SERVER 구문
    7. ALTER TABLE 구문
    8. ALTER TABLESPACE 구문
    9. ALTER VIEW 구문
    10. REATE DATABASE 구문
    11. CREATE EVENT 구문
    12. CREATE FUNCTION 구문
    13. CREATE INDEX 구문
    14. CREATE LOGFILE GROUP 구문
    15. CREATE PROCEDURE 및 CREATE FUNCTION 구문
    16. CREATE SERVER 구문
    17. CREATE TABLE 구문
    18. CREATE TABLESPACE 구문
    19. CREATE TRIGGER 구문
    20. CREATE VIEW 구문
    21. DROP DATABASE 구문
    22. DROP EVENT 구문
    23. DROP FUNCTION 구문
    24. DROP INDEX 구문
    25. DROP LOGFILE GROUP 구문
    26. DROP PROCEDURE 및 DROP FUNCTION 구문
    27. DROP SERVER 구문
    28. DROP TABLE 구문
    29. DROP TABLESPACE 구문
    30. DROP TRIGGER 구문
    31. DROP VIEW 구문
    32. RENAME TABLE 구문
    33. TRUNCATE TABLE 구문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.1.19 CREATE TRIGGER 구문

CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name
    trigger_time trigger_event
    ON tbl_name FOR EACH ROW
    trigger_body

trigger_time: { BEFORE | AFTER }

trigger_event: { INSERT | UPDATE | DELETE } 

이 문은 새로운 트리거를 만듭니다. 트리거는 테이블과 관련된 해당 테이블에 대해 특정 이벤트가 발생하면 활성화되는 명명 된 데이터베이스 오브젝트입니다. 트리거는 tbl_name 라는 테이블에 연결됩니다. 이것은 영구 테이블을 가리켜 야합니다. 트리거를 TEMPORARY 테이블 또는 뷰에 연결할 수 없습니다.

트리거 이름은 스키마의 네임 스페이스에 존재합니다. 즉, 모든 트리거가 스키마에서 고유 한 이름을 가져야합니다. 다른 스키마의 트리거는 같은 이름을 가질 수 있습니다.

이 섹션에서는 CREATE TRIGGER 구문에 대해 설명합니다. 자세한 내용은 섹션 20.3.1 "트리거 구문 및 예" 를 참조하십시오.

CREATE TRIGGER 이 트리거에 연결된 테이블의 TRIGGER 권한이 있어야합니다. 이 섹션의 나머지 부분에서 설명 된 바와 같이, DEFINER 값에 따라이 문 SUPER 권한이 필요할 수 있습니다. 바이너리 로깅이 활성화되어있는 경우 섹션 20.7 "저장 프로그램의 바이너리 로깅" 에서 설명 된 바와 같이, CREATE TRIGGER 에 SUPER 권한이 필요할 수 있습니다.

DEFINER 절은이 섹션의 나머지 부분에서 설명 된 바와 같이, 트리거의 활성화 중에 액세스 권한을 확인하는 데 사용되는 보안 컨텍스트를 결정합니다.

trigger_time 이 트리거의 동작 시간입니다. 이것은 트리거가 각 행의 변경 전이나 후에 활성화되는 것을 나타내는 BEFORE 또는 AFTER 할 수 있습니다.

trigger_event 이 트리거를 활성화하는 형식을 나타냅니다. 다음 trigger_event 값이 허용됩니다.

  • INSERT :이 트리거 (예를 들어, INSERT , LOAD DATA 및 REPLACE 문을 사용하여) 새로운 행이 테이블에 삽입 될 때마다 활성화됩니다.

  • UPDATE :이 트리거 (예 : UPDATE 문을 사용하여) 행이 변경 될 때마다 활성화됩니다.

  • DELETE :이 트리거 (예를 들어, DELETE 및 REPLACE 문을 사용하여) 행이 테이블에서 삭제 될 때마다 활성화됩니다. 테이블에 대한 DROP TABLE 및 TRUNCATE TABLE 문은 DELETE 를 사용하지 않기 때문에이 트리거를 활성화하지 않습니다. 또한 파티션을 삭제 DELETE 트리거는 활성화되지 않습니다.

trigger_event 는 트리거를 활성화하는 리터럴 SQL 문 유형을 나타내는 것이 아니라 테이블 작업 유형을 나타냅니다. 예를 들어, INSERT 트리거는 INSERT 문뿐만 아니라 LOAD DATA 문에서도 활성화됩니다. 그것은 두 문을 테이블에 행을 삽입하는 것입니다.

이 혼란을 초래할 수있는 예로 INSERT INTO ... ON DUPLICATE KEY UPDATE ... 구문이 있습니다. 모든 행에 BEFORE INSERT 트리거가 활성화 된 후 행에 중복 키가 존재했는지 여부에 따라 AFTER INSERT 트리거 만하거나 BEFORE UPDATE 트리거와 AFTER UPDATE 트리거가 모두 활성화됩니다.

참고

계단식 된 외부 키 액션은 트리거를 활성화하지 않습니다.

특정 테이블에 대한 트리거 이벤트와 액션 시간이 같은 복수의 트리거가 존재해서는 없습니다. 예를 들어, 하나의 테이블에 2 개의 BEFORE UPDATE 트리거를 정의 할 수 없습니다. 그러나 BEFORE UPDATE 및 BEFORE INSERT 트리거 또는 BEFORE UPDATE 와 AFTER UPDATE 트리거는 설정할 수 있습니다.

trigger_body 는 트리거가 활성화 될 때 실행되는 문입니다. 여러 문을 실행하려면 BEGIN ... END 복합 문 구조 구문을 사용합니다. 또한이를 통해 스토어드 루틴 내에서 허용되는 것과 같은 문을 사용할 수 있습니다. 섹션 13.6.1 "BEGIN ... END 복합 문"부분 을 참조하십시오. 일부 문은 트리거 내에서 허용되지 않습니다. 섹션 D.1 "저장 프로그램 제한 사항" 을 참조하십시오.

트리거 본문 내에서는 별칭 OLD 와 NEW 를 사용하여 대상 테이블 (트리거와 관련된 테이블)의 열을 참조 할 수 있습니다. OLD. col_name 업데이트 또는 삭제되기 전에 기존 행의 열을 나타냅니다. NEW. col_name 는 삽입 된 새 행 또는 업데이트 된 후 기존 행의 열을 나타냅니다.

MySQL은 트리거가 생성되었을 때 유효한 sql_mode 시스템 변수의 설정을 저장하고 트리거가 실행을 시작했을 때 현재의 서버 SQL 모드에 관계없이 항상 트리거 본체를 강제로이 설정 실행합니다.

DEFINER 절은 트리거의 활성화 중에 액세스 권한을 확인하는 데 사용되는 MySQL 계정을 지정합니다. user 값을 지정하려면 ' user_name '@' host_name ' ( GRANT 문에 사용되는 것과 같은 형식), CURRENT_USER 또는 CURRENT_USER() 로 지정된 MySQL 계정에하십시오. DEFINER 의 기본값은 CREATE TRIGGER 문을 실행하는 사용자입니다. 이것은 명시 적으로 DEFINER = CURRENT_USER 를 지정하는 것과 동일합니다.

DEFINER 절을 지정한 경우 다음의 규칙에 따라 유효한 DEFINER 사용자 값이 결정됩니다.

  • SUPER 권한이없는 경우 허용되는 유일한 user 값은 리터럴로 지정하거나 CURRENT_USER 를 사용하여 지정한 계정입니다. 정의들을 다른 계정으로 설정할 수 없습니다.

  • SUPER 권한이 있으면 구문으로 유효한 계정 이름을 지정할 수 있습니다. 계정이 실제로 존재하지 않는 경우 경고가 생성됩니다.

  • 존재하지 않는 DEFINER 계정에서 트리거를 만들 수 있지만 그 계정이 실제로 존재하게 될 때까지 이러한 트리거를 활성화하는 것은 권장되지 않습니다. 그렇지 권한 확인에 대한 동작은 정의되어 있지 않습니다.

MySQL 트리거 권한을 확인 할 때 DEFINER 사용자를 다음과 같이 고려합니다.

  • CREATE TRIGGER 시점에서이 문을 실행하는 사용자는 TRIGGER 권한이 있어야합니다.

  • 트리거 활성화시 권한은 DEFINER 사용자에게 확인됩니다. 이 사용자는 다음의 권한이 필요합니다.

    • 대상 테이블에 대한 TRIGGER 권한.

    • 테이블 컬럼에 대한 참조가 트리거 본체의 OLD. col_name 또는 NEW. col_name 을 사용하여 발생한 경우 해당 테이블에 대한 SELECT 권한.

    • 테이블 컬럼이 트리거 본체의 SET NEW. col_name = value 할당 대상 일 경우, 대상 테이블에 대한 UPDATE 권한.

    • 다른 어떤 권한도 일반적으로 트리거에서 실행되는 명령문 필요합니다.

트리거의 보안 자세한 내용은 섹션 20.6 "저장 프로그램 및 뷰의 액세스 제어" 를 참조하십시오.

트리거 본체에서 CURRENT_USER() 함수는 트리거의 활성화시에 권한을 확인하는 데 사용되는 계정을 반환합니다. 이것은 그 트리거가 활성화되는 원인이되는 작업을 수행 한 사용자가 아닌 DEFINER 사용자입니다. 트리거의 사용자 감사 내용은 섹션 6.3.13 "SQL 기반의 MySQL 계정 활동 감사" 를 참조하십시오.

LOCK TABLES 를 사용하여 트리거가있는 테이블을 잠근 경우 섹션 13.3.5.2 "LOCK TABLES와 트리거" 에 설명 된대로, 트리거에서 사용되는 테이블도 잠겨 있습니다.

트리거 사용의 자세한 내용은 섹션 20.3.1 "트리거 구문 및 예" 를 참조하십시오.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved