1

データベース テーブルに mySQL トリガーがあります。PHP を介してデータベースに接続するアプリケーションからテーブルが更新されると、トリガーが完全に起動して更新されます。しかし、phpMyAdmin で mySQL コマンド ラインを使用してそのテーブルの行を更新しようとすると、データベースがハングしているように見えますか? 私は一生、何が原因なのか、またはこれをデバッグする方法さえ理解できません。誰かが何か明らかなことを見ることができる場合のトリガーを次に示します (または、トリガーは私にとって新しいので、より効率的にする方法さえあります!)!

前もって感謝します!

DROP TRIGGER IF EXISTS `t_crewstatusupdate`;

DELIMITER //

CREATE TRIGGER `t_crewstatusupdate` AFTER UPDATE ON `crewcallouts`
  FOR EACH ROW
  BEGIN
    DECLARE taxmultiplier INT;
    SET taxmultiplier = ( SELECT t1.taxmultiplier 
                          FROM entities t1, callouts t2 
                          WHERE t1.entityid=t2.entityid 
                            AND t2.calloutid=NEW.calloutid
                        );
    IF NEW.status != OLD.status THEN
      UPDATE callouts 
        SET status = CASE ( SELECT MIN(status) 
                            FROM crewcallouts 
                            WHERE calloutid=NEW.calloutid
                          ) WHEN 1 THEN 1 
                            WHEN 2 THEN 2 
                            WHEN 3 THEN 4 
                            WHEN 4 THEN 4 
                            WHEN 5 THEN 4 
                            WHEN 6 THEN 4 
                            WHEN 7 THEN 7 
                     END 
        WHERE calloutid=new.calloutid;
    END IF;
    UPDATE calloutstats 
      SET netcrewcost = ( SELECT SUM(get_gross_amount(
                                        ( SELECT calloutdate 
                                          from callouts 
                                          WHERE calloutid=NEW.calloutid
                                        ),
                                        ( SELECT starttime 
                                          from callouts 
                                          WHERE calloutid=NEW.calloutid
                                        ),
                                        (workhours + extrahrs),
                                        crewrate,
                                        1, 
                                        IFNULL(travelhours,0)  )
                                    ) 
                          FROM crewcallouts 
                          WHERE calloutid=NEW.calloutid
                        ),
           grosscrewcost = ( SELECT SUM(get_gross_amount((SELECT calloutdate from callouts WHERE calloutid=NEW.calloutid),(SELECT starttime from callouts WHERE calloutid=NEW.calloutid),(workhours + extrahrs),crewrate,1, IFNULL(travelhours,0))
                         * taxmultiplier) 
                             FROM crewcallouts 
                             WHERE calloutid=NEW.calloutid
                           )        
      WHERE calloutid=NEW.calloutid;
  END
//
DELIMITER ;
4

0 に答える 0