2013-01-18 3 views
1

삽입 된 테이프의 수에 따라 특정 테이프 ID를 자동으로 만드는 트리거를 만드는 방법. 트리거 이름은 trig_auto_spid이어야합니다.
즉, 표 tapes에서 BatDogQTy=3이므로 표 Tape_Spec_IdTapesId T1=TS1, TS2, TS3...에 있습니다.mysql에서 트리거를 만드는 방법은 무엇입니까?

Tapes         
---------------------- 
TapesID Title Qty 
T1  BatDog  3 
T2  UnderCat 2 
T3  IronMouse 1 
T4  Boys Zone 1 
T5  RoboCat 1 


Tape_Specific_ID 
---------------- 
TapesID TSpecID 
    T1 TS1 
    T1 TS2 
    T1 TS3 
    T2 TS4 
    T2 TS5 
    T3 TS6 
    T4 TS7 
    T5 TS8 

: 내 두 개의 테이블이 여기에

Table:Tape_Spec_ID

TSpecID TS1, TS2, TS3...

에서

Table:tapes Qty:3

해당 :
내가 당신에게 자신을 분명하게 희망 ... 여기

는 흐름이다 나는 무엇을 해야할지 전혀 모른다.

+0

왜 당신은 당신의 응용 프로그램에서 tape_specific_id를 업데이트하지? – hequ

+0

나는 방금 방아쇠를 당김으로써 그것을 어떻게하는지 안다. 나를 도울 수 있니? –

+0

아니요, 죄송합니다. 나는 mysql 트리거를 사용하지 않았다. 나는 당신이 정말로 당신의 목표를 성취하기위한 방아쇠가 필요하다고 생각하기를 원했기 때문에 대답했다. 어떻게하는지 배우고 싶다면 MySQL 문서를 확인하는 것이 좋습니다. – hequ

답변

2

이 시도 : 당신이 테이프에 행을 삽입 한 후

DELIMITER $$ 

DROP TRIGGER /*!50032 IF EXISTS */ `trig_auto_spid`$$ 

CREATE 
    /*!50017 DEFINER = 'root'@'localhost' */ 
    TRIGGER `trig_auto_spid` AFTER INSERT ON `tapes` 
    FOR EACH ROW BEGIN 
     SELECT REPLACE(TSpecID, 'TS', '') INTO @counter 
     FROM Tape_Specific_ID 
     ORDER BY TSpecID DESC LIMIT 1; 

     SET @loopCnt = @counter + new.qty; 
     WHILE (@counter <= @loopCnt) DO 
      INSERT INTO Tape_Specific_ID(TapesID, TSpecID) 
      VALUES (new.TapesID, CONCAT('TS', @counter)); 
      SET @counter:[email protected] + 1; 
     END WHILE; 
END; 
$$ 

DELIMITER ; 
+0

... tape_sprcific_id에 추가하지 않는다 ... –

+0

무엇이 문제인가? ? –

+0

예 : TapesID : T9, Title : Coat, Qty : 2, tape_specific_ID를 추가해야합니다. TapesID : T9 TSpecID : T10 및 다른 TapesID : T9, TspecID : T11, 내가 만든 것입니다. 나 자신에게 분명해 ...하지만 문제는 tape_specific_id에 추가하지 않을 것입니다 ... –

관련 문제