수색…


통사론

  • CREATE [DEFINER = {사용자 | CURRENT_USER}] TRIGGER trigger_name trigger_time trigger_event 각 행에 대해 tbl_name 켜기 [trigger_order] trigger_body
  • trigger_time : {BEFORE | AFTER}
  • trigger_event : {INSERT | 업데이트 | 삭제}
  • trigger_order : {FOLLOWS | PRECEDES} other_trigger_name

비고

이미 다른 DB에 트리거를 사용하는 경우 두 가지 사항에주의를 기울여야합니다.

각 줄마다

FOR EACH ROW 는 구문의 필수 부분입니다.

오라클처럼 문에 의해 (한 번 쿼리에 의해) 트리거를 수행 할 수 없습니다. 실제 누락 된 기능보다 성능 관련 문제가 더 많습니다.

트리거 생성 또는 교체

CREATE OR REPLACE 는 MySQL에서 지원하지 않습니다.

MySQL은이 구문을 허용하지 않으므로 대신 다음을 사용하십시오.

DELIMITER $$

DROP TRIGGER IF EXISTS myTrigger;
$$
CREATE TRIGGER myTrigger
-- ...

$$
DELIMITER ;

조심하십시오. 이것은 원자 적 트랜잭션아닙니다 .

  • CREATE 실패하면 이전 트리거를 잃어 버릴 것이다.
  • 무거운로드에서는 DROPCREATE 간에 다른 작업이 발생할 수 있습니다. LOCK TABLES myTable WRITE; 먼저 데이터 불일치와 UNLOCK TABLES; 를 피 UNLOCK TABLES; CREATE 후에 테이블을 해제합니다.

기본 트리거

표 만들기

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Query OK, 0 rows affected (0.03 sec)

트리거 생성

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)

CREATE TRIGGER.은 계정 테이블과 연관된 ins_sum 트리거를 작성합니다. 또한 트리거 동작 시간, 트리거 이벤트 및 트리거가 활성화 될 때 수행 할 작업을 지정하는 절도 포함합니다

값 삽입

트리거를 사용하려면 누산기 변수 (@sum)를 0으로 설정하고 INSERT 문을 실행 한 다음 변수에 어떤 값이 있는지 확인하십시오.

mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
mysql> SELECT @sum AS 'Total amount inserted';
+-----------------------+
| Total amount inserted |
+-----------------------+
| 1852.48               |
+-----------------------+

이 경우 INSERT 문 실행 후 @sum 값은 14.98 + 1937.50 - 100 또는 1852.48입니다.

드롭 트리거

mysql> DROP TRIGGER test.ins_sum;

테이블을 h 제하면 테이블에 대한 트리거도 h 제됩니다.

트리거 유형

타이밍

트리거 동작 시간 수정 자에는 두 가지가 있습니다.

  • BEFORE 트리거는 요청을 실행하기 전에 활성화되며,
  • AFTER 변경 후 트리거 화재.

이벤트 트리거

트리거를 첨부 할 수있는 세 가지 이벤트가 있습니다.

  • INSERT
  • UPDATE
  • DELETE

Before 트리거 예제

DELIMITER $$

CREATE TRIGGER insert_date 
    BEFORE INSERT ON stack
    FOR EACH ROW
BEGIN
        -- set the insert_date field in the request before the insert
    SET NEW.insert_date = NOW();
END;

$$
DELIMITER ;

업데이트 트리거 예제 이전

DELIMITER $$

CREATE TRIGGER update_date 
    BEFORE UPDATE ON stack
    FOR EACH ROW
BEGIN
        -- set the update_date field in the request before the update
    SET NEW.update_date = NOW();
END;

$$
DELIMITER ;

트리거 삭제 후 예

DELIMITER $$

CREATE TRIGGER deletion_date 
    AFTER DELETE ON stack
    FOR EACH ROW
BEGIN
        -- add a log entry after a successful delete
    INSERT INTO log_action(stack_id, deleted_date) VALUES(OLD.id, NOW());
END;

$$
DELIMITER ;


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow