2013-01-18 111 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 ... –