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 |
댓글