본문 바로가기
Database/mysql

[MYSQL /Database] 트리거 trigger

by JINJINC 2023. 4. 14.
728x90
반응형

트리거 trigger 

- 테이블에 관련하여 이벤트가 발생할 때 작동시켜주는 프로시저 같은 데이터베이스 개체
- 테이블 관련된 이벤트라는게 테이블(update, delete, insert)을 수정하는 것과 
  관련된 이벤트를 말한다.

 

drop table if exists test2;
create table test2(num int);
insert into test2 values(1),(2),(3);
select * from test2;


set @before_delete=0;    -- 변수 초기화
drop trigger if exists trig_delete;  -- 기존 트리거 제거 
delimiter $$
create trigger trig_delete 트리거 생성
before delete   
	on test2        
	for each row    -- delete실행전 test2에 대해서 각 행마다 수행
begin
	set @before_delete = @before_delete + 1 ;  -- 트리거 실행될때마다 1씩 증가 
delimiter ;

delete from test2 where num=3 ;
select @before_delete;

 

=> 삭제된 데이터만큼 before_delete의 수는 올라갑니다.

 

 

<연습2>

 

t1 테이블에 insert되는 경우            
t2 테이블에 자동으로 데이터 insert 하기  

create database db01;
use db01;
create table t1(id int, name varchar(30));
create table t2(addr varchar(30));

-- 트리거 시작 --
drop trigger if exists trig_insert;  
delimiter $$
create trigger trig_insert  
before insert 
 on t1 
 for each row    
begin
 insert into t2 values("광주");
end $$
delimiter ;
-- 트리거 끝 --

<확인>
insert into t1 values(1,'홍길동');
select * from t1;
select * from t2;

<연습3>

DELIMITER //
CREATE TRIGGER removed_name
	AFTER DELETE 			
	ON t1  		
        FOR EACH ROW			
BEGIN
INSERT INTO t2
VALUES (OLD.id, OLD.name, OLD.address, CURDATE() );
END
// DELIMITER ;

delete from t1 where id=1;
select * from t2;

delete from t1 where id=2;
select * from t2;

delete from t1 where id=3;
select * from t2;

※ OLD테이블 
- delete, update 작업이 수행되면서 삭제 또는 변경되기 전의 예전 값이 잠깐 저장된다. 
- 예전 데이터를 참조하기 위해서는 OLD 테이블을 참조하면 된다.

 

<연습4>

Create table t1(id int);
create table t2(name varchar(30));
create table t3(addr varchar(30));

delimiter //
create trigger trig_t1_t2
before insert
	on t1 
	for each row
begin
	insert into t2 values("홍길동");
end //
delimiter ;

delimiter $$
    create trigger trig_t2_t3
    before insert 
    on t2
    for each row 
    begin
		insert into t3 values("부산");
	end $$
delimiter ;

<연습4 -확인>

insert into t1 values (1);
select * from t1;
select * from t2;
select * from t3;

 

 

728x90
반응형

'Database > mysql' 카테고리의 다른 글

[MYSQL /Database] 커서 (cursor)  (0) 2023.04.14
[MYSQL /Database] function 함수  (0) 2023.04.14
[MYSQL / Database] proceduer/view/role 실습2  (0) 2023.04.14

댓글