2016-04-26 11 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 
相關問題