함수

물론 Mysql에서 프로시저만 사용하는 것은 아니다. 함수를 따로 정의해서 사용해도 된다.

 

SET GLOBAL log_bin_trust_function_creators = 1;

우선 위의 코드를 실행시키고 다음과 같이 함수를 만들어주면 된다.

CREATE DEFINER=`root`@`localhost` FUNCTION `f1`(n1 varchar(20), n2 varchar(20)) 
RETURNS varchar(50) CHARSET utf8
BEGIN
	declare name varchar(50);
    set name = concat_ws(' ', n1, n2);
RETURN name;
END

하지만 mysql에서는 자체 내장된 함수만을 사용하는 것을 선호하기 때문에 프로시저를 이용하는 것을 추천한다.

 

 

 

 

 

트리거(Trigger)




insert, update, delete 동작이 실행될떄마다 이 동작 전이나 후에 실행할 코드를 등록하는 방법

create trigger 트리거이름
after/before insert/update/delete
on 테이블이름
[for each row] 


행의 삽입, 수정 후에 트리거가 실행되는 것이 좋다.

delimiter $$
create trigger insert_emp_trig
after insert
on emp1
for each row
begin
set @msg = concat(new.name, '님 새로 추가됨');    #new.name/old.name : 트리거에서 사용하는 값
end$$
delimiter ;
-> emp1에 insert할떄마다 실행
insert into emp1 values(300,'aaa',10000,80);
select @msg;





delimiter $$
create trigger emp1_trig
after insert
on emp1
for each row
begin
insert into emp1_backup(id, cmd, new_sal) values(new.emp_id, 'insert', new.sal);
end$$
delimiter ;
insert into emp1 values(301,'bbb',15000,80);
select @msg;





delimiter $$
create trigger emp1_trig2
after update
on emp1
for each row
begin
insert into emp1_backup(id, cmd, old_sal, new_sal) 
    values(old.emp_id, 'update', old.sal, new.sal);
end$$
delimiter ;
update emp1 set sal=20000 where emp_id=300;




삭제 전에 트리거가 실행되는 것이 좋다.

delimiter $$
create trigger emp1_trig3
before delete
on emp1
for each row
begin
insert into emp1_backup(id, cmd, old_sal, new_sal) 
    values(old.emp_id, 'delete', old.sal);
end$$
delimiter ;
delete from emp1 where emp_id>=145 and emp_id<150;




'MySQL은 좀 낫다면서요' 카테고리의 다른 글

MySQL #프로시저, 커서  (0) 2021.06.19
MySQL #뷰, 인덱스  (0) 2021.06.18
MySQL #테이블 : 게시판만들기  (0) 2021.06.17
MySQL #테이블  (0) 2021.06.17
MySQL #Ch6.서브쿼리 : 연습문제  (0) 2021.06.17

+ Recent posts