2016-04-26 10 views
0

我已创建的库数据库和表中的一个是transaction我想更新return_timestamp arrtibute其是如下Mysql的触发器或存储过程在同一个表B列

CREATE TABLE action 
(
t_id int NOT NULL AUTO_INCREMENT, 
b_id int, 
m_id int, 
borrow_timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
is_returned Bool Default 0, 
is_lost Bool, 
is_damaged Bool, 
return_timestamp TIMESTAMP, 
f_id int, 
PRIMARY KEY (t_id), 
CONSTRAINT fk_bookId FOREIGN KEY (b_id) REFERENCES book(b_id), 
CONSTRAINT fk_memberId FOREIGN KEY (m_id) REFERENCES member(m_id), 
CONSTRAINT fk_fineId FOREIGN KEY (f_id) REFERENCES fine(f_id) 
); 

的更新来更新列A当is_returned更改为1

这是时间戳我想这

CREATE TRIGGER update_return_timestamp 
AFTER UPDATE 
ON action FOR EACH ROW 

BEGIN 
DECLARE return_timestamp timestamp; 

    SELECT is_returned FROM action 
    IF is_return IS 1 
     BEGIN 
      INSERT INTO transaction (return_timestamp) VALUES (now()) 
     END 
    COMMIT TRANSACTION 
END 

我哪里错了?或者什么是正确的方法?我不知道该怎么做

+0

此代码是否工作?交易是一个保留的关键字http://dev.mysql.com/doc/refman/5.7/en/commit.html – e4c5

+0

是的,它确实工作..我得到了与上述代码 – Penny

+0

创建表,但请考虑更改为更合理表名。您的触发器函数看起来非常混乱,因为无法分辨您是在引用事务表还是事务关键字。 – e4c5

回答

1

您可以在更新记录之前声明您的Trigger。 如果新更新设置了is_returned字段,那么你设置了return_timestamp字段。

CREATE TRIGGER update_return_timestamp 

BEFORE UPDATE ON `action` FOR EACH ROW 
BEGIN 

IF NEW.is_returned = 1 Then 
    Set NEW.return_timestamp = CURRENT_TIMESTAMP 
END IF; 

END 
相关问题