2012-05-04 59 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