트리거 trigger
: 연쇄반응(작용)
- 이벤트에 반응하여 자동으로 실행되는 구문
- 이벤트가 발생하는 경우 데이터의 무결성(일관성)을 지켜야 하는 경우 사용
- 예) 재고량과 판매량을 동일하게 업데이트 해야하는 경우
- 이벤트
- Insert : old = null / new = 입력값 (after)
- Delete : old = 변경전 값 / new = null (before)
- Update : old = 변경전 값 / new = 변경후 값 (old=before, new=after)
트리거 trigger 특징
- 특정 테이블에 INSERT, DELETE, UPDATE 같은 "DML"문이 수행될 때, 데이터베이스에서 자동으로 실행
- 사용자호출 필요없음, 자동으로 실행됨
- 한번 생성이 되면 중복 생성X = 삭제 후 재생성 필요
트리거 trigger 삭제
- if exists : 트리거가 있다면 삭제를 진행
- 항상 trigger 생성전에 확인하는 것이 좋음
drop trigger if exists 트리거명 ;
트리거 trigger 생성
- delimiter : 문장의 종료를 변경
- insert / delete / update : 이벤트
- 트리거명 : 이벤트명_테이블명 으로 주로 생성
- 종료 명 : // $$ 을 보통 사용
- 예) 이벤트 insert (new)
- https://jungeun980906.tistory.com/120 / trigger내 함수 사용X
- 예) 이벤트 update (old,new)
- https://jungeun980906.tistory.com/122 / trigger내 함수 사용X
delimiter // ; ( 문장의 끝을 ; 세미콜론이
아닌 // 기호로 사용한다고 설정)
create trigger 트리거명 after / before insert / delete / update on 테이블명
for each row
begin
실행구문 ;
end //
delimiter ; (문장의 종료를 ; 세미콜론으로 원상복구 설정)
트리거 trigger 안에 변수 procedure를 사용하여 생성
- procedure : 프로시저 (변수)
- declare : 저장할 값이 있어서 변수를 만들겠다고 선언
- set : 변수에 값 할당
- new : 이벤트 발생한 행의 최신 데이터= 변경된 데이터
- old : 이벤트 발생한 행의 변경 이전 데이터
- 예시 ) a테이블의 값이 삭제되는 경우, 삭제진행 전에 b의 값 변동 (before delete, old)
- https://jungeun980906.tistory.com/119 / trigger내 함수 사용O
- 예시 ) a테이블에 값이 삽입되는 경우, b테이블의 값 변동 (after insert, new)
- https://jungeun980906.tistory.com/117 / trigger내 함수 사용O)
delimiter //
create trigger 트리거명 after/before 이벤트명 on 테이블명
for each row
begin
declare _변수명 변수옵션 ; (변수 설정시 변수명 앞에 _ 넣기)
실행구문 ;
end //
delimiter ;
⭐ 변수 사용시 주의 )
- declare를 사용하여 선선 후 변수 사용(지역변수 개념)
- 트리거나 프로시저안에서의 변수는 전역변수(@변수명)을 사용할 수 없음!
- 트리거나 프로시저(함수)안에는 일반적으로 _를 사용하여 일반 칼럼과 구분
'DB > 명령프롬프트 - mysql' 카테고리의 다른 글
[MySQL] 트리거 trigger 예제 : before delete, old 사용 (0) | 2023.03.30 |
---|---|
[MySQL] 트리거 trigger 예제 : after insert, new 사용 (0) | 2023.03.30 |
[MySQL] 뷰 view 생성 예제 (0) | 2023.03.30 |
[MySQL] 뷰 view 생성, 수정, 삭제 (1) | 2023.03.30 |
[MySQL] 인덱스(색인) index 생성, 추가, 삭제 (0) | 2023.03.30 |