MySQL更新触发错误;在更新的记录中设置值

时间:2014-04-28 04:58:31

标签: java mysql triggers h2

我正在尝试创建一个触发器,在任何行成功执行更新后,将列last_modified设置为CURRENT_TIMESTAMP。我在java中使用h2库。

这是我的表格声明

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;

这是我的触发器ATTEMPT 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; 

这是我的触发器ATTEMPT TWO,因为我读到在更新触发器内无法更新(因为这可能导致无限循环),即使我在SQLite中使用了上述内容并且它正常工作:< / p>

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

但两个都没有工作:(

提前感谢您的帮助

1 个答案:

答案 0 :(得分:1)

一种选择是同时避免所有触发器,并将last_modified列的列定义更改为:

`last_modified` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

应该做的诀窍......