수색…
통사론
- 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
실패하면 이전 트리거를 잃어 버릴 것이다. - 무거운로드에서는
DROP
와CREATE
간에 다른 작업이 발생할 수 있습니다.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