(MYSQL/데이터베이스) 트리거 트리거

트리거 트리거

– 테이블과 관련하여 이벤트가 발생할 때 트리거되는 프로시저와 같은 데이터베이스 개체입니다.
– 테이블 관련 이벤트는 테이블 수정(업데이트, 삭제, 삽입)과 동일
관련 이벤트를 말합니다.

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 ;

num=3인 test2에서 삭제;
@before_delete 선택;

=> 삭제된 데이터만큼 before_delete의 개수가 증가합니다.

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;


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 테이블
– 삭제 및 업데이트 작업을 수행함에 따라 삭제 또는 변경 전의 이전 값이 임시로 저장됩니다.
– 이전 데이터를 참조하려면 OLD 테이블을 참조하십시오.


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 ;

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