DB/명령프롬프트 - mysql

[MySQL] 트리거 trigger 생성, 삭제

congs 2023. 3. 30. 14:31

트리거 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 // ; ( 문장의 끝을 ; 세미콜론이
아닌 // 기호로 사용한다고 설정)


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를 사용하여 선선 후 변수 사용(지역변수 개념)
  • 트리거나 프로시저안에서의 변수는 전역변수(@변수명)을 사용할 수  없음!
  • 트리거나 프로시저(함수)안에는 일반적으로 _를 사용하여 일반 칼럼과 구분