2013-04-02 114 views
0

我在MySQL中觸發時遇到問題。我有一個名爲「last_modified」的列,我希望在編輯表時自動更新當前的日期和時間。使用觸發器,這是我的SQL查詢:使用觸發器更新DATETIME,在MySQL中獲取錯誤1442

delimiter // 
CREATE TRIGGER trg_update_responders BEFORE UPDATE ON survey_responders 
FOR EACH ROW 
BEGIN 
UPDATE survey_responders 
SET NEW.last_modified = CURRENT_DATETIME(); 
END;// 

然而,當我更新表,如用此查詢:

UPDATE survey_responders SET first_name = "bob" WHERE id = "1"; 

MySQL工作臺顯示錯誤1442:「無法更新表'table_name'在存儲函數/觸發器中,因爲它已經被調用此存儲函數/觸發器的語句使用「

我已經看過類似的問題,但是仍然沒有修復它。幫助表示讚賞。

**更新**

這奏效了:

delimiter // 
CREATE TRIGGER trg_update_responders BEFORE UPDATE ON survey_responders 
FOR EACH ROW 
BEGIN 
SET NEW.last_modified = CURRENT_TIMESTAMP(); 
END;// 

好像我根本沒有必要重複

UPDATE survey_responders 

和current_datetime中()不存在,我不得不使用CURRENT_TIMESTAMP()。

+0

更新語句本身沒有更新last_modified列的任何原因? –

+0

這是一項任務的一部分;它需要我使用觸發器。 – Richard

回答

1

這奏效了:

delimiter // 
CREATE TRIGGER trg_update_responders BEFORE UPDATE ON survey_responders 
FOR EACH ROW 
BEGIN 
SET NEW.last_modified = CURRENT_TIMESTAMP(); 
END;// 

好像我根本沒有必要重複

UPDATE survey_responders 

和current_datetime中()不存在,我不得不使用CURRENT_TIMESTAMP() 。

0

你試圖做的是不可能使用觸發器。

在存儲函數或觸發器,它不允許通過調用函數或觸發 語句來修改已被使用(讀或寫)一 表。

Source

你需要這個做一些其他的方式。

在這裏看到:MySQL - Trigger for updating same table after insert

做到這一點的典型方式是創建一個存儲過程,即 插入到/更新目標表,然後更新其他行(S), 所有交易。