2014-04-28 52 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)只是因为我想看到它在触发器 - 原因是,如果我需要执行这个挂起条件,我不能在如你所建议的那样。 再次,谢谢! –