2015-01-16 66 views
0

我的觸發看起來是這樣的:觸發導致#1054 - 在未知列 'X' 'where子句'

DROP TRIGGER IF EXISTS `trigger_name`; 
DELIMITER // 
CREATE TRIGGER `trigger_name` 
AFTER UPDATE ON `table1` 
FOR EACH ROW UPDATE `table2` SET `modified` = CURRENT_TIMESTAMP WHERE `id` = `NEW.id` 
// 
DELIMITER ; 

這崩潰並出現上述錯誤(#1054),如果做到這一點:

UPDATE table1 SET owner = NULL WHERE id = 82 

找到了解決辦法!問題是反引號/反引號(`)。如果我改寫觸發器就像

DROP TRIGGER IF EXISTS trigger_name; 
DELIMITER // 
CREATE TRIGGER trigger_name 
AFTER UPDATE ON table1 
FOR EACH ROW UPDATE table2 SET modified = CURRENT_TIMESTAMP WHERE id = NEW.id 
// 
DELIMITER ; 

一切工作正常! :-)除非嚴格限制,否則我建議不要使用反引號/反引號(`)。

回答

0

的問題是背面引號/反引號(')。看到原來的問題

1

問題的編輯是反引號/反引號(')

的問題是不是在揹包,而是你用他們的事實不當

...WHERE `id` = `NEW.id` 
       ^ ^

通過這種方式你告訴MySQL的寫它,你要更新的表,在列0的相同值的所有行和NEW.id。是的,如果你願意,你可以有一個這樣的名字的專欄。這裏是一個SQLFiddle演示。

  1. 一個NEW關鍵字不應backticked
  2. 你需要BACKTICK當您使用點表示法(<table>.<column>)對象標識符只是(你的情況id

寫正確,應該一直這個樣子,而不是

...WHERE `id` = NEW.`id` 
        ^^ 

,如果你沒有使用限制的字符或保留字在數據庫對象標識符沒有必要使用backtiks雖這麼說。

相關問題