2012-05-04 56 views
0

我試圖使用觸發器在行更新時更新數據庫上的列。使用另一個表更新時更新MySQL行

這是觸發

CREATE 
DEFINER=`root`@`localhost` 
TRIGGER `mysql_development`.`update_translated_position` 
BEFORE UPDATE ON `mysql_development`.`players_to_teams` 
FOR EACH ROW 
BEGIN 
    UPDATE players_to_teams 
    INNER JOIN position_translator 
    ON NEW.position = position_translator.RawPosition 
    SET NEW.translated_position = position_translator.NCAAposAbbrev1; 
END$$ 

我需要從原始position輸入到「計算」的translated_position(萬一有人給我一個非標準的位置)。

我認爲這是鎖定行,因爲我得到了1096,沒有使用表的錯誤。

我需要更新使用外部position_translator表更新的players_to_teams行。

回答

1

使用SET,而不是直接UPDATE(因此完全避免了連接):

SET NEW.translated_position := (
    SELECT NCAAposAbbrev1 FROM position_translator WHERE RawPosition = NEW.position 
); 
+0

什麼是':='符號? –

+0

@TylerDeWitt:這是[賦值操作符](http://dev.mysql.com/doc/en/assignment-operators.html#operator_assign-value)。 – eggyal