2014-04-28 81 views
0

我試圖做出一個觸發器,在任何行上成功執行更新後,將last_modified列設置爲CURRENT_TIMESTAMP。我在java中使用h2庫。MySQL更新觸發器錯誤;在更新的記錄中設置一個值

這裏是我的表聲明

CREATE TABLE Professors 
(utorID VARCHAR(30) NOT NULL, 
FName VARCHAR(20), 
LName VARCHAR(20), 
Email VARCHAR(50), 
UTEmail VARCHAR(50), 
Birthdate VARCHAR(10), 
OfficeBC VARCHAR(2), 
OfficeRM VARCHAR(6), 
Department VARCHAR(20), 
Status VARCHAR(50), 
Fellowship VARCHAR(20), 
OfficeStat VARCHAR(15), 
PhoneNum VARCHAR(10), 
HomeAddr VARCHAR(50), 
HomePhoneNum VARCHAR(10), 
Notes VARCHAR(100), 
last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
lastPerson VARCHAR(50), 
PRIMARY KEY (utorID), 
CONSTRAINT uc_ProfNames UNIQUE(FName, LName)) ENGINE=InnoDB; 

這裏是我的觸發嘗試ONE:

CREATE TRIGGER Update_Time_Profs 
AFTER UPDATE ON 
Professors 
FOR EACH ROW 
BEGIN 
UPDATE Professors 
SET last_modified=CURRENT_TIMESTAMP 
WHERE utorID=OLD.utorID; 
END; 

這裏是我的觸發嘗試二,因爲我讀,這是不可能的內更新一個更新觸發器(因爲這可能會導致無限循環),即使我已經在SQLite中使用了上述內容並且它正常工作:

  CREATE TRIGGER Update_Time_Profs 
      BEFORE UPDATE ON 
      Professors 
      FOR EACH ROW 
      BEGIN 
      SET NEW.last_modified=CURRENT_TIMESTAMP; 
      END; 

但無論是對你有所幫助的工作:(

在此先感謝

回答

1

一種選擇是避免誘發因素一起,改變last_modified列的列定義是:

`last_modified` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

應該做的伎倆.....

+0

謝謝你,這將符合我的目的。 我可以不在任何更新語句中設置last_modified = NULL,然後將其設置爲默認值,但是?或者這隻適用於插入? 此外,我沒有接受答案(雖然我upvoted)只是因爲我想看到它在觸發器 - 原因是,如果我需要執行這個掛起條件,我不能在如你所建議的那樣。 再次,謝謝! –