Mysql

使用觸發器根據其他表中的條件更新表中的值

  • July 11, 2018

我有 2 個表,首先儲存所有比賽的詳細資訊1:其次是加入了哪些比賽的使用者2比賽詳情

參加過哪些賽事的使用者

如果第二個表中的race_id計數為每個race_id 5個,我想在比賽表中將race_status更新為Full並將record_status更新為2。我為它創建了一個 MySQL 觸發器,這裡是它的觸發器程式碼:

CREATE TRIGGER `user_race_count` BEFORE INSERT ON `tbl_map_race`
   FOR EACH ROW BEGIN
   DECLARE a1,a2 INT;
   SELECT tbl_map_race.race_id, COUNT(tbl_map_race.race_id) INTO a1,a2
   FROM `tbl_map_race`
   GROUP BY tbl_map_race.race_id;
   IF ((a1 = NEW.race_id) AND (a2>=5))
   THEN 
       UPDATE tbl_race 
       SET tbl_race.race_status = 'Full', tbl_race.record_status = '2' 
       WHERE tbl_race.race_id = @r_id; 
   END IF; 
END

在觸發器中, tbl_race是第一個表,tbl_map_race第二個表。

觸發器已成功創建,但是當我執行查詢以加入競賽時觸發器工作在後面,我無法更新第一個表中的值,但如果我刪除觸發器並執行查詢,我可以在第二個插入記錄桌子。對此的任何幫助將不勝感激。謝謝你。

CREATE TRIGGER `user_race_count` 
AFTER INSERT 
ON `tbl_map_race`
FOR EACH ROW 
BEGIN
   IF 5 <= ( SELECT COUNT( /* DISTINCT */ user_id) 
             FROM tbl_map_race
             WHERE race_id = NEW.race_id)
   THEN 
       UPDATE tbl_race 
       SET race_status = 'Full'
         , record_status = '2' 
       WHERE race_id = NEW.race_id; 
   END IF; 
END

引用自:https://dba.stackexchange.com/questions/211853