MYSQL 트리거 관련 질문입니다. 내공 500

MYSQL 트리거 관련 질문입니다. 내공 500

작성일 2018.11.08댓글 1건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요 AFTER UPDATE 트리거를 제작중입니다.

CREATE DEFINER=`root`@`localhost` TRIGGER `order_AFTER_UPDATE` AFTER UPDATE ON `order` FOR EACH ROW BEGIN
DECLARE savesid varchar(15);
    set savesid = '010-1423-2536';
IF new.orderstate = 'complete' THEN 
UPDATE  ddib.supplier
SET
ddib.supplier.sellcount =NEW.amount + ddib.supplier.sellcount
WHERE ddib.supplier.sid =savesid;
END IF;
END

위의 코드는 현재 작성하여 동작되는 코드입니다.
 
1. '010-1423-2536' 자리에 SELECT sid FROM ddib.item where ddib.item.iid=OLD.iid 와 같은 값이 들어가게 하고 싶습니다. 어떻게 수정해야 할까요?

2. ddib.supplier.sellcount 의 값이 0이라면 정상 작동하지만 만약에 NULL 이라면 UPDATE 후에도 영향이 을 주지 않습니다 어떻게 수정해야 할까요?

3. TRIGGER 안의 변수의 값을 할당 할때 TABLE JOIN을 활용하여 그 값을 할당할 수 있나요? 있다면 예시 부탁드립니다.! 
위의 코드를 기반으로 설명해주시면 감사하겠습니다.


#mysql 트리거 #mysql 트리거 생성 #mysql 트리거 단점 #mysql 트리거 조회 #mysql 트리거 insert update 동시 #mysql 트리거 삭제 #mysql 트리거 수정 #mysql 트리거 if문 #mysql 트리거 예제 #mysql 트리거 권한

profile_image 익명 작성일 -

안녕하세요?
예전 기억을 더듬어 답변 드립니다.

1.
쿼리 결과를 변수에 대입 하시려면 SELECT ... INTO ... FROM ... 스타일로 쓰시면 됩니다.

# 변경 전
DECLARE savesid varchar(15);
SET savesid = '010-1423-2536';

# 변경 후
DECLARE savesid varchar(15);
SELECT sid INTO savesid FROM ddib.item where ddib.item.iid=OLD.iid

2.

지금 테스트 해볼 수 있는 환경이 아니라 확실하지는 않지만, 사용하신 UPDATE 쿼리의 SET 절에서 (아래)

SET ddib.supplier.sellcount = NEW.amount + ddib.supplier.sellcount

우변에 사용된 ddib.supplier.sellcount 값이 NULL 일때, 이를 NEW.amount 와 더한 결과 역시 NULL이 되기 때문으로 보입니다.
IFNULL 함수를 사용하여 NULL이면 0으로 바꿔 연산하시면 될것 같습니다.

# 변경 후
UPDATE  ddib.supplier
SET ddib.supplier.sellcount = NEW.amount + IFNULL(ddib.supplier.sellcount, 0)
WHERE ddib.supplier.sid =savesid;

3.

질문을 잘 이해하지 못했습니다.
변수의 값을 할당 할때 TABLE JOIN을 활용하여 그 값을 할당한다는게 어떤 의미인가요?

혹시 위 1번처럼 쿼리 결과를 변수에 할당하는거라면 조인 쿼리 역시 별반 다를것은 없습니다.
이를테면 아래와 같습니다.

DECLARE name VARCHAR(120);
DECLARE qty INT UNSIGNED DEFAULT 0;

SELECT product.name, order.qty INTO name, qty
FROM order
INNER JOIN product ON order.product_id = product.product_id
WHERE order.order_id = 123456;

DB 관련 질문입니다. MariaDB vs MySQL

... 답변해주시면 내공은 제가 가진만큼 드릴게요. 감사합니다. 안녕하세요, DBMS... 텍스트 길이가 길지 않으면 varchar (500) 정도로 사용을 해도 무난할 것 같습니다....

Mysql 외부 접속 관련 질문

... 알려주시면 내공 500 드립니다!! 안녕하세요, MySQL DBMS를 오래 전부터 사용해오고 있는데요. 아이피주소 외에 다른 접근 제어는 없는 것으로 알고 있습니다. 아이피주소가...

JSP Sql 연동문제

... sql초보라 상세하게 설명해주시면 감사하겠습니다 내공 100입니다!! 급해요!!!! 질문에 대한답변입니다. (vip125) 올려주신...

자바(java)로 만들어진...

... 가지고있는 내공 전부 드리겠습니다... //부서 셋팅 관련 멤버... private static int... 하시면 트리거나 프로시져...

아두이노 관련해서 질문드립니다

... ^^;)이 많이 좋지만은 않아서 질문 좀 드립니다 아두이노 센서 값을 MySQL로... 내공 500 걸게요 ! 그렇다면 아두이노와 mysql을 연결해줄 프로그램을 작성 해야 합니다....

JSP Tomcat5.0 xml file 관련 질문요.

... 고수님들께 질문을 하게되었는데요.... 내공받지 않고도 가르켜 주실만큼... type="javax.sql.DataSource"/> <ResourceParams name="jdbc...

웹호스팅 관련 문의 드립니다 내공

... 두번째 질문. 아 그리고 무료도메인 사이트 ba.ro라는 도메인을 이용할 예정인데... 비용이 500원인 곳도 있습니다. 1일 트래픽은 500~600MB 내외)을 사용하는 것이 좋고...