2013-01-18 125 views
1

如何根據插入的磁帶數量創建自動創建特定磁帶ID的觸發器。觸發器名稱應爲trig_auto_spid
這意味着在表tapes中,BatDog具有QTy=3所以在表Tape_Spec_IdTapesId T1=TS1, TS2, TS3...中。
我希望我自己清楚你...如何在mysql中創建觸發器?

這裏的流量:

Table:tapes Qty:3

相當於

Table:Tape_Spec_ID

TSpecID TS1, TS2, TS3...

這裏是我的兩個表:

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 

我真的不知道該怎麼做,有什麼想法?

+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,標題:外套,數量:2,應該添加tape_specific_ID TapesID:T9 TSpecID:T10和另一個TapesID:T9,TspecID:T11,我希望我製作我自己清楚你...但問題是它不會添加在tape_specific_id ... –