データベース テーブルに 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 ;