● 트리거 (Trigger)
– 특정 테이블에 이벤트(삽입,삭제,변경)가 발생될 경우에 자동 처리되는 명령의 집합
형식)
create trigger 트리거명 after(또는 before) 이벤트 on 테이블명 for each row 자동실행명령;
ex 1)
mysql> create trigger total_trigger before insert on person for each row set @sum=@sum+new.pay;
mysql> set @sum=0;
mysql> select @sum; => 환경변수 sum에 저장된 값은 0
mysql> insert into person values(2000,’choi’,’manager’,1001,’2002-03-04′,5000,null,40);
mysql> insert into person values(2001,’kkk’,’salesman’,2000,’2002-04-08′,3000,null,40);
mysql> select @sum; => 환경변수 sum에 저장된 값은 8000 이 되었음을 확인할 수 있다.
ex 2) division 테이블의 부서번호를 삭제하면 person테이블에 있는 같은 부서번호 데이터 삭제
mysql> delimiter // ==> 명령의 끝마침 기호를 //로 바꾼다.(실행명령어를 여러 개 사용하고자 할 때, 마침기호의 중복을 피하기 위해 사용한다)
mysql> create trigger delete_trigger after delete on division for each row
-> begin
-> delete from person where dno=old.dno;
-> end;
-> //
mysql> delimiter ; ==> 다시 끝마침 기호를 콜론(;)으로 바꾼다.
mysql> delete from division where dno=10;
mysql> select * from person; => 부서코드 10인 사원 전체 삭제된 것을 확인할 수 있다.
– 트리거 확인
mysql> show triggers;
– 트리거 삭제
mysql> drop trigger 트리거명;
ex)
mysql> drop trigger total_trigger;
mysql> drop trigger delete_trigger;
● 스토어 프로시저(Stored Procedure) => View + 다양한 기능
– 빈번히 사용되는 쿼리문을 프로시저로 작성함으로써 필요할 때마다 불러서 사용할 수 있다. => 편리성
형식)
create procedure 프로시저명(in 필드명 자료형, out 필드명 자료형,…) 프로시저 호출시 처리되는 명령;
mysql> call 프로시저명(값 또는 변수…); => 프로시저 호출
ex 1)
mysql> create procedure pro1() select * from person;
mysql> call pro1(); ==> person 테이블 조회
ex 2) 지정한 이름의 데이타 삭제
mysql> delimiter //
mysql> create procedure pro2(in name varchar(10))
-> begin
-> delete fro person where pname=name;
-> end
-> //
mysql> delimiter ;
mysql> call pro2(‘ally‘); => ally 데이타 삭제
ex 3)
mysql> create procedure pro3(in num int,out name varchar(10)) select pname into name from person where pno=num;
mysql> call pro3(1113,@a);
mysql> select @a;
– 프로시저 확인
mysql> show procedure status;
– 프로시저 삭제
mysql> drop procedure 프로시저명;
좋은 자료 정말 감사합니다.