【问题标题】:Mysql trigger or stored procedure to update column A on update of column B in same tableMysql触发器或存储过程在同一表中更新B列时更新A列
【发布时间】:2016-04-26 05:07:41
【问题描述】:

我创建了一个图书馆数据库,其中一张表是transaction,如下所示

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)
);

我想将return_timestamp arrtibute 更新为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

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

【问题讨论】:

  • 这段代码还能用吗?事务是保留关键字dev.mysql.com/doc/refman/5.7/en/commit.html
  • 是的,它确实有效.. 我用上面的代码创建了表
  • 但请考虑更改为更合理的表名。您的触发器函数看起来很混乱,因为无法分辨您指的是事务表还是其中的事务关键字。
  • 对不起,我改成行动了。我希望这不会混淆

标签: mysql stored-procedures triggers


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2023-03-17
    • 2023-03-23
    相关资源
    最近更新 更多