我有以下MySQL觸發器。它在tbl_users上被更新。如果當天已經存在記錄,它將使用一些信息更新tbl_user_stats,或者如果當天沒有記錄,它將在tbl_user_stats中插入新記錄。 action_date是tbl_user_stats的PK,它保存日期。MySQL - 當觸發器被觸發時重複PK,但不直接插入記錄時
drop trigger if exists trigger_update_user_stats_upgrades_and_downgrades$$
CREATE TRIGGER trigger_update_user_stats_upgrades_and_downgrades AFTER UPDATE ON tbl_users
FOR EACH ROW BEGIN
DECLARE date_now int;
IF NEW.premium <> OLD.premium THEN
SET date_now = (SELECT count(*) from tbl_user_stats WHERE DATE(action_date) = CURDATE());
IF date_now > 0 THEN
IF NEW.premium = 0 THEN
UPDATE tbl_user_stats SET downgrades = downgrades + 1 WHERE DATE(action_date) = CURDATE();
ELSE
UPDATE tbl_user_stats SET upgrades = upgrades + 1 WHERE DATE(action_date) = CURDATE();
END IF;
ELSE
IF NEW.premium = 0 THEN
INSERT INTO tbl_user_stats (action_date, downgrades) values (CURDATE() + INTERVAL 1 DAY, 1);
ELSE
INSERT INTO tbl_user_stats (action_date, upgrades) values (CURDATE() + INTERVAL 1 DAY, 1);
END IF;
END IF;
END IF;
END$$
朝向底部,我插入CURDATE()+ INTERVAL 1天用於測試目的。我試圖模擬在第二天執行的tbl_users更新。所以如果今天是11/22/13,我想假裝tbl_users中的記錄在11/23/13更新。如果觸發器工作正常,tbl_user_stats應該有一個插入了11/23/13的action_date的新記錄。
問題是,當我嘗試更新tbl_users時,出現「重複主鍵11/23/13」錯誤。但是,tbl_user_stats中沒有設置爲11/23/13的主鍵。當我使用11/23/13作爲PK手動插入一條新記錄到tbl_user_stats中時,沒有任何問題。只有當我嘗試更新tbl_users時纔會出現問題。爲什麼我得到重複主鍵錯誤?
你可以發佈你的表結構的一些數據和導致錯誤的'UPDATE'聲明? – wchiquito