mysql 강좌 9

트리거 (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 이 되었음을 확인할 수 있다.


mysql10_01.jpg


mysql10_02.jpg

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인 사원 전체 삭제된 것을 확인할 수 있다.
mysql10_03.jpg


– 트리거 확인
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 테이블 조회


mysql10_04.jpg


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 프로시저명;

Loading

One thought on “mysql 강좌 9

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다